2017-03-29 24 views
-3
number = int(raw_input("Enter a number :")) 
div = range(0, number) 
list = [] 
while div <= number: 
    if number % div == 0: 
     list.append(div) 
     div =+ 1 

    print list 

で立ち往生していますこれは私がこの練習のために作られた私のコードです:私は私のコードが、そのは、任意の出力を与えていないと間違っているものを知らないので、私はプログラミングに新しいです http://www.practicepython.org/exercise/2014/02/26/04-divisors.html 。ここで私は練習のpython演習4

+1

'div'はリストであり、数字ではありません...あなたのwhileステートメントの代わりに' for(i、number): 'を使ってください。 – LoicM

+0

これはforループを使ってのみ行うことができますか? –

+0

で始まるか、 'div = 0'で始まって' while'ループを続けてください。 – dirkgroten

答えて

1

、のpython 2.7を使用して、ダウン票の人々から探しているならこれも考えてください。しかし... 1つは尋ねることによってのみ学ぶ!

あなたが提案したコードには3つの重要な間違いがあり、さらにPythonicを作るためのいくつかの方法があります。

  1. まず、ゼロで割ることはできません!したがって、範囲内の数字(1-)をチェックしたいと思うでしょう。
  2. ループが終了したときだけでなく、インデントに基づいてlistが何度も印刷されます。
  3. listは、Pythonキーワードであるため、変数として使用しないでください。その後

、私の命題は以下の通りです、それは、よりPython的にする:raw_inputはもはやPythonの3.xで存在することを

number = int(input("Enter a number :")) 
output = [] 

for i in range(1,number+1): 
    if not number%i: 
    output.append(i) 

print(output) 

は注意また、このようにしてループからループを避けることができます。これは経験から簡単に間違いにつながる可能性があります。代わりに、range(1,number)によって生成されたリスト内のエントリを自動的にループすることによって置き換えられました。

最後にrangeの注釈ですが、おそらくセマンティクスにもなります。 numberもまたnumberの約数と考えています。これを行うにはrange(1,number+1)を使用しました。たとえば、range(5)5[0,1,2,3,4]までのリストを返します。私。 5は含まれていません。

0

はあなたが必要とするコードです:

number = int(input("Enter a number :")) 
list = [] 
# theoretically this is the limit you should test for divisors 
for div in range(2, int(number/2 + 1)): 
    if number % div == 0: 
     # adds the divisor to the list 
     list.append(div) 
     div += 1 

# prints all divisors in new line 
for item in list: 
    print(item) 

あなたは、私はこの答えは十分に簡単だと思い代わりinput使用のraw_input

+0

なぜ 'range(2、int(number/2 + 1))'。私は運動がすべての数字を見つけることだと思った。数字。数字の分数である数字。 –

+0

@TomdeGeus:これは、 'number'自体がリストに必要ない場合に動作するショートカットです。それでもコードには他の欠陥があります: 'div + = 1'は必要ではなく、同じ名前の変数を定義して組み込みの' list'を上書きするのは悪いスタイルです。 – Matthias