私はこれを適切に題名していないとお詫びしますが、次のコードを実行するのに問題があります。 forループのパラメータは、問題の少なくとも一部であるように見えます。 forループの "num"に "limit"を代入すると、 "範囲内のj(1、limit)"を返すと、ループが実行され、目的の出力が得られます。しかし、限界の代わりにnumを使うと、ループの反復をより正確に制御できるはずですが、まだ完了しないでもエラーは発生しません。Python:Loop Parameters
from collections import Counter
limit = int(input('What number do you want to factor?'))
num = limit
factors = []
while num != 1:
for j in range(2, num):
if (num % j == 0):
num = num // j
factors.append(j)
break
factorEnum = Counter(factors)
print(factors)
print(factorEnum)
コードの目的は、与えられた数の素因数分解を生成することです。たとえば28の場合、素因数は{2,7}ですが、{2、2、7}となる素因数分解を探しています。このコードは、範囲の数字の最小公倍数(たとえば1〜40)を探す別のスクリプトの一部です。これはProjectEulerの問題です。
if(num%j == 0): 'それがTrueでないときは、あなたのループが永遠に動くように' num'を変更しません。そして、 'num'が2だったとすると、'範囲内のj(2、num) 'は実行されず、numは減少せず、同じことが起こります。 – tdelaney
プリントをいくつか追加すると、どこが間違っているかがわかります。さらに良い方法は、 'pdb3'デバッガで実行することです。 – tdelaney
@tdelaneyこれは、ある時点で 'j'の値が 'num'と等しくない場合にのみ当てはまります。数字が素数であっても、 'j == num'と 'num'が 'num' // 'j'(1になる)に設定されるまでループします。その後、break文はforループを終了し、 'num'の値が1の場合、whileループが終了します。 ... おもう。 – KhromRol