このコードはPython 3で書かれています。私は10001番目の素数を見つけようとしています。関数がPythonで "リストインデックスを範囲外にする"というエラーを返すのはなぜですか?
#10001st prime number
mylist=[]
def prime_index(n):
for i in range(99**99):
for x in range(2, int(i**1/2)):
if i % x == 0:
return False
return True
mylist.append(i)
n=int(n+1)
print(mylist[n])
break
prime_index(10001)
実行すると、「リストのインデックスが範囲外です」と表示されます(print(mylist[n])
を参照)。 しかし、mylist.append(i)
の途中でリストに素数を追加しています。だから、誰かが何が起こっているのか分からないので、ここで何が問題なのか教えてもらえますか? 99 ** 99は小さすぎますか?コードの微妙な問題?
'print()'が実行されるときに 'n'の値に驚かれると思います。いくつかのデバッグprintステートメントをコードに追加して、実行時に何が起こっているかを判断します。このようにして、コード実行を監視することができます。特に、print()が実行される直前に 'n 'の値を出力して、コードが表示しようとしている配列のインデックスを確認することができます。 – jefe2000
'mylist'の長さが0のままで初めて、あなたのコードが違反行になります。 –
' range(99 ** 99) 'は' mylist'とは関係のない数字のリストを生成します。 – DyZ