我目前正在尝试编写一个要求输入数字的函数,以及返回是否为素数的函数。我计划使用raw_input()函数获取输入。如果我在Python中键入它并运行它,该程序可以工作,但是当我在PowerShell中运行它时,我收到以下错误:
>>> python ex19.1.py
What is your number? 34
Traceback (most recent call last):
File "ex19.1.py", line 13, in <module>
is_prime(number)
File "ex19.1.py", line 5, in is_prime
if n % 2 == 0 and n > 2:
TypeError: not all arguments converted during string formatting
我目前正在运行Python 2.7,我不确定为什么我收到字符串错误,因为我在代码中没有使用任何字符串格式化程序。下面是我为我的程序使用的代码,名为ex19.1.py。
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
number = raw_input("What is your number? ")
is_prime(number)
我的问题是,为什么会出现这个错误,我该怎么做才能解决它?谢谢!
答案 0 :(得分:3)
number
应该是整数。但是,使用raw_input
获得的是字符串。
只需将其转换为int
:
number = int(raw_input("What is your number? "))
n % 2
尝试格式化字符串&#34; 34&#34;使用整数2
(当格式字符串不需要参数时#34; 34&#34;)。这是造成此特定错误消息的原因。答案 1 :(得分:2)
当您从raw_input
获取输入时,默认情况下它是一个字符串。
这样的事情:
>>> n = "2"
>>> n % 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
要解决您的问题,请将n
强制转换为int,然后您的代码才能正常运行。
try:
num = int(number)
is_prime(num)
except ValueError as e:
#Some typechecking for integer if you do not like try..except
print ("Please enter an integer")