2017-04-09 9 views
0

から行使する。 (除数が分からない場合、それは別の数に均等に分かれる数字です。たとえば、13は26の除数で、26/13に余りがないためです)除数が、私はこの質問に答えるためのコードを作成した練習用のpython

残念ながら、私のプログラムでは与えられた数の除数の値を返しません。ここに私のコードです:

print('Enter a number to know its divisors :') 
number = int(input()) 

while number > 1: 
    inf = number - 1 
    result = number % inf 
    if result == 0: 
     print (inf) 

あなたは私のエラーがどこですか?可能であれば、このプログラムをよりシンプルにする方法についてのあなたのコメントもお待ちしています。

ベスト

+0

あなたは 'number'や' inf'を減らしていません。あなたは無限ループになります。 –

+0

はfor-loopを使用します。 –

+0

Merci @ Jean-François。最後に 'number = number - 1'を追加するとどうなりますか? – Bonapara

答えて

0

あなたは実際にあなたのために、ループ内の変数infをデクリメントし、infは(同じに維持されなければならないnumberとは対照的に)1に達するまでループを実行する必要があります。しかし、あなたがはるかに容易rangefilter、およびlambda機能を使用してプログラムを書くことができます。

print('Enter a number to know its divisors :') 
number = int(input()) 

for divisor in filter(lambda x: number % x == 0, range(1, number)): 
    print(divisor) 

編集:私はあなたの代わりにフィルタリングするfor ... in ... ifを使用できることを忘れるために馬鹿のビットのように感じる

print([x for x in range(1, number) if number % x == 0]) 
+0

回答ありがとうございました。私はフィルターとラムダ関数を知らなかった。私はウェブ上で検索しようとしましたが、私は本当に理解していませんでした。多分あなたのコード(そしてこの2つの関数がどのように機能するか)を私に説明することができますか?そうでなければ、ありがとう、それは完全に働いています。 – Bonapara

+0

確かに。 'range(1、number)'は1から 'number'までの数字のシーケンスを返します。それらはすべての可能な除数を形成し、それらの全ての可能性を'フィルタリング 'して ' number%x == 0 '(すなわち、' number 'を均等に分割できるもの)である。 'for ... in'ステートメントは、見つかったすべての除数を反復して出力します。 – gyre

+0

私は理解しています、ありがとう! – Bonapara

関連する問題