2016-09-27 7 views
1

私は自分自身にパイソンを教えていますが、本当にこの質問に固執しています。 「奇数のリストを入力として受け入れる関数を書く。奇数のリストをループし、それぞれを偶数にする。偶数を新しいリストに格納し、その新しいリストを返す」。関数内で奇数のループのみを許可する

私は質問の後半部分には満足していますが、入力を奇数にすることのみを苦労しています。

これまで私が書いたことは、あなたが提出した任意の奇妙なリストに適用されます。 ([1,3,5])で始まり、偶数で始まるときに機能します。 ([2,3,5])しかし、私は偶数がリストの途中にあるときに働くようにはできません。 ([1,2,3]) - これを印刷することはできません。

def odd_to_even(x): 
for i in x: 
    if i %2 == 0: 
     print('This is not an odd number') 
     break 
    else: 
     list = [] 
     for n in x: 
      list.append(n -1) 
     return list 
+7

なぜこのケースに対処する必要がありますか?仕様によれば、奇数のリストが得られると言われているので、そうでなければ拒否するよう要求されない限り、常に真であると仮定することができます。また、奇妙な二重ループのことが起こっている( 'i in x'と' for n in x'の両方)。 – jonrsharpe

+0

その問題文は実際に入力を拒否する必要があるとは言いませんが、それはどうですか?つまり、APIが「奇数のリストを提供する」と言っていて、発信者が偶数を提供しているとすれば、それは少なくとも部分的にはそれらの部分にすぎません。 Python: "私たちはすべてここで大人だ" – ShadowRanger

+1

それは「受け入れる」という言葉をどのように解釈するかによって決まります。それには「拒絶」も含まれていますか? – deceze

答えて

2

私は、あなたはおそらく、テストを含める必要はありませんが、それは損はない@jonrsharpe、@ShadowRanger、および@decezeのコメントに同意するだろう。ここで@ decezeの行を使って確認します。あなたがリストの外側にを宣言しなければならないことを忘れないでください。物事をより明確にするために名前を変えることさえもより良い。 decezeの良いワンライナー@組み込むと検証を維持するために

def odd_to_even(input_list): 
    if any(i % 2 == 0 for i in input_list): raise ValueError 
    output_list = [] 
    for i in input_list: 
     output_list.append(i - 1) 
    return output_list 

def odd_to_even(input_list): 
    if any(i % 2 == 0 for i in input_list): raise ValueError 
    return [i - 1 for i in input_list] 

あなたは、二重ループについて奇妙な何であるかのコメントで尋ねたので、私は小さな説明を追加したいですそれはここにある。ループ内にループを入れたいと思うこともありますが、これはそのようなケースの1つではありません。あなたは、単一のリストを持っており、その上に1回ループすることは、あなたがにのために、この場合には十分なものである:

  1. リスト内のすべての数字が奇数であるかどうかを決定します(リストを検証)
  2. それを修正し、各番号を取ります

最初のループ内で2回目のループを繰り返すと、リストをループするたびにリストのループが終了します。たぶん、フレーズは混乱しているかもしれません。入力リストが[1, 3, 5]だったとします。ループの中でループを使うと、新しいリストを作成して3回出力することになります。なぜなら、入力内の各項目に対して出力を1回作成するからです。私はあなたのためにそれをクリアするのに役立つことを願っています

+2

これは初心者には向いていないかもしれませんが、... 'return i - 1 for i in x '' ... – deceze

+2

また、奇数と偶数の両方を受け取り、エラーが発生した場合、それらは変わりません): 'return in [i in x for i]' – ShadowRanger

関連する問題