1

数値が平方根であるかどうかをチェックする関数があります。

def primeness(n):
    for x in range(2, (n**0.5) + 1):
        if n % x == 0:
            return False
    return True
def main():
    n = input('Type a digit \n')
    if primeness(n):
        print(n, 'is a prime number')
    else:
        print(n, 'is not a prime number')
main()

ただし、実行するたびに次のエラーが発生します。

Traceback (most recent call last):
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 12, in <module>
main()
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 8, in main
if primeness(n):
  File "C:/Users/Matt/Desktop/Python Stuff/test.py", line 2, in primeness
for x in range(2, (n**0.5) + 1):
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float'

私は何が間違っているのですか?

4

5 に答える 5

5

python3ではinput、古いと同等ですraw_input。したがって、キャストを実行して整数に変換する必要があります。

def main():
    n = int(input('Type a digit \n')) #right here
    if primeness(n):
        print(n, 'is a prime number')
    else:
        print(n, 'is not a prime number')

文字列が整数になることを保証できない場合は、などのキャストを実行するか、ブロックをint(float(input()))使用して問題を処理する必要があります。try-except

于 2012-12-17T01:41:33.067 に答える
3

入力文字列から int に変換する必要があります

また、次のような問題が発生する可能性があります

for x in range(2, (n**0.5) + 1):

n ** 0.5範囲には整数が必要ですが、浮動小数点数を返す場合があります。丸めたり int にキャストしたりして修正します

于 2012-12-17T01:45:11.497 に答える
1

input文字列を返します。intではありません。最初に変換する必要があります。

于 2012-12-17T01:41:37.907 に答える
1

nの平方根を計算する必要はありません。代わりにxの二乗を計算できます:

def primeness(n):
    x = 2
    while x * x <= n:
        if x % n == 0:
            return False
        x = x + 1
    return True
于 2012-12-17T04:16:11.500 に答える
0
python 3.2

#change this line:
for x in range(2, int(n**0.5) + 1):
于 2012-12-17T02:27:27.373 に答える