以下は、n番目の素数を計算するために書いたコードです。arr = [2,3,5]; を初期化します。また、prime(arr,n) は、最初の n 個の素数を含むように arr を変更することになっています。しかし、arr は、prime(arr,n) が実行された後の変更を反映しません。リストは参照型として渡されると読んだので、次のコードの問題は何ですか。t は、検証を行う必要のあるテスト ケースの数を示します。
プログラムは、配列インデックスが arr の範囲外であるというエラーを返します。
import sys;
def prime (arr,n):
while(len(arr)< n):
num=arr[len(arr)-1]+1;prime=0;
while(prime==0):
prime = 1
for val in arr:
if(num%val==0):
prime=0;
break;
if(prime == 1):
print "hello";
arr = arr + [num];print arr; print "--";
else:
num = num+1;
t=raw_input();
t=int(t);
arr=[2,3,5];
ans =[];
for v in range (0,t):
n = raw_input();
n = int(n);
if(n<=len(arr)):
ans = ans + [arr[n-1]];
else:
prime(arr,n);print arr;print"arr was printed"
ans= ans + [arr[n-1]];
print ans;print 'ans ';
以下は、上記のコードのサンプル実行です
>>>
1
4
hello
[2, 3, 5, 7]
--
[2, 3, 5]
arr was printed
Traceback (most recent call last):
File "C:\Users\Pulkit\Desktop\Random\nth_prime.py", line 30, in <module>
ans= ans + [arr[n-1]];
IndexError: list index out of range
前もって感謝します :)