我是整个编码的新手......所以这里有。 只是想写一个简单的猜数游戏,还要做输入验证。因此只接受整数作为输入。我已经弄清楚如何清除字母字符,所以我可以将数字转换为整数。当我输入一个浮点数时,我遇到了麻烦。我无法让它将浮点数转换为整数。任何帮助表示赞赏。正如我所说,我正在谈论这个编码的第3天,所以试着理解我的小知识。提前谢谢。
这是我的主程序中的功能。
def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
if userGuess.isalpha() == False:
userGuess = int(userGuess)
print(type(userGuess), "at 'isalpha() == False'")
break
elif userGuess.isalpha() == True:
print("Please enter whole numbers only, no words.")
print(type(userGuess), "at 'isalpha() == True'")
return userGuess
如果我使用4.3(或任何浮动)作为输入,这是我得到的错误。
Traceback (most recent call last):
File "C:\\*******.py\line 58, in <module>
validateInput()
File "C:\\*******.py\line 28, in validateInput
userGuess = int(userGuess)
ValueError: invalid literal for int() with base 10: '4.3'
答案 0 :(得分:7)
实际上int()
函数需要整数字符串或 float ,而不是浮点字符串。如果给出了浮点字符串,则需要先将其转换为float
,然后再转换为int
:
int(float(userGuess))
答案 1 :(得分:0)
首先,为什么想要将float字符串转换为整数?您是否希望将4.7
视为用户猜到4
的含义?还是5
?或合法但自动无效的猜测?或者实际上是值4.7
(在这种情况下你根本不需要整数)?还是...?
其次,你接近这个的方式是错误的。 userGuess.isalpha()
仅告诉您猜测完全由字母组成。这意味着你仍然会将"Hello!"
视为一个数字,因为它至少有一个非字母。
如果您想知道字符串是否是有效整数,只需在其上调用int
,并使用try
/ except
来处理不是:
def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
try:
userGuess = int(userGuess)
print(type(userGuess), "after int succeeeded")
break
except ValueError:
print("Please enter whole numbers only, no words.")
print(type(userGuess), "after int failed")
return userGuess
如果您想以不同于其他类型的失败来处理实际单词,例如,您可以打印更具体的错误消息,那么您可以在isalpha
子句中检查except
。
如果你想要检查它是否是一个浮点数,所以你可以给出一个不同的错误,在try
子句内做同样的事情 - float(userGuess)
来调用except
。或者,如果要截断浮点数,请将int(userGuess)
更改为int(float(userGuess))
。
即使在try
部分内,您可能还需要进行其他一些检查。例如,如果他们输入-23
或178
怎么办?这些是整数,但它们不是1到100之间的数字。
显然,您需要的验证越多,所需的代码就越多,因为每个测试都是另一行代码。因此,您可能需要考虑将验证从循环输入转移到单独的函数,以使其更具可读性。
答案 2 :(得分:0)
请勿使用isalpha
来屏蔽输出。 EAFP - 转换它并处理该异常。 ValueError
正是您想要的,因为您可以处理它并告诉用户更正他们的输入。或者出于某种奇怪的原因,你想要默默地纠正来自&#34; 4.3&#34;到&#34; 4&#34;。
def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
try:
int(userGuess)
return userGuess # you shouldn't really keep this string...
except ValueError as e:
print("Please enter whole numbers only, no words.")
答案 3 :(得分:0)
您可以使用字符串操作和类型转换。
int(userGuess.split('.')[0])