これはcodeacademy.comの質問です。ここではPythonを学習しています。 私が望むのは、数値がプライムであるかどうかを調べる関数を定義することです。 この場合はTrueを返します。 そうでない場合は、Falseを返します。ここで関数is_prime - エラー
は私のコードです:
def is_prime(x):
lst = [] # empty list to put strings 'False' and 'True'
for i in range(2,x): # starting at 2 and not including x (number 1 is a divisor of all numbers
if x <= 2: # [1] see bellow the explanation
lst.append('False')
break
elif x % i == 0: # if x is divisible by i(number between 2 and not including x)
lst.append('False')
break # break, because we already know x is not prime
elif x % i > 0:
lst.append('True') # x is not divisible by i
if 'False' in lst:
return False # x is not prime - return False
else:
return True # 'True' is in lst, so x is prime - return True
print is_prime(-2) # [2] I get an error here. See below
[1] - codeacademyにそれが言うので、私はこの条件を作った: "!ヒント は覚えている:2は素数ではありませんよりも、すべての数字が少ないです"
[2] - たとえば 'print is_prime(11)'または 'is_prime(6)'を実行すると、正常に動作します。だから私は答えを提出するが、codeacademyはそれを受け入れない。それは言う: "あなたの関数はis_prime(-2)で失敗し、Falseを返す必要があるときにTrueを返します。"
こんにちはそして歓迎のように同じプログラムを書くことができます。実際、これは非常に良い質問であり、問題を再現するために必要なすべての情報を提供しています。これはStackOverflowの最初のポスターにとって非常にまれです。おめでとうございます(そしてあなたの英語でも)。ここにいるとうれしい! –
実行を視覚化するためにhttp://pythontutor.comを強くお勧めします。そこに行ってコードを実行ウィンドウに貼り付けると、なぜis_prime(-2)に 'True'が得られるのかがわかります。 –
それ以外に素数を見つけたい場合は '2'と' x'の間のすべての数値をチェックする必要はありません。 'int(math.sqrt(x))'は十分に高い上限です。 –