我对整个编码的事情是个新手......所以这里开始了.只是想写一个简单的数字猜测游戏,但也做输入验证。因此,只有整数才会被接受为输入。 我已经想好了如何剔除字母字符,所以我可以把数字转换成整数。 当我输入一个浮点数时,我遇到了麻烦。 我不能让它把浮点数转换成整数。 感谢任何帮助。 我说过,我对这个编码的事情大约是第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'
其实 int()
函数期待一个 整数字符串 或 浮动但不是 浮子串. 如果给定的是一个浮动字符串,你需要将其转换为 float
再到 int
作为。
int(float(userGuess))
首先,你为什么 想要 来将浮动字符串转换为整数?你想把 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
子句,如果你想处理检查是否是浮点,从而给出一个不同的错误,做同样的事情。
如果你想处理检查它是否是一个float,这样你就可以给出一个不同的错误,做同样的事情--。try
呼叫 float(userGuess)
-在内部 except
子句。或者,如果你想截断浮点数,可以将该句改为 int(userGuess)
到 int(float(userGuess))
.
你可能还想要一些其他的检查,甚至在里面的 try
部分。例如,如果他们输入 -23
或 178
? 这些都是整数,但它们不是1和100之间的数字。
很明显,你想要的验证越多,需要的代码就越多,因为每个测试都是另一行代码。所以,你可能要考虑把验证移到一个单独的函数中,而不是在输入上进行循环,以使其更易读。
不要使用 isalpha
以筛选输出。 EAFP -- 转换它并处理该异常。 要么是 ValueError
正是你想要的,因为你可以处理它并告诉用户纠正他们的输入。 或者出于一些奇怪的原因,你想默默地把他们的输入从 "4.3 "改成 "4"。
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.")
你可以使用字符串操作和类型转换。
int(userGuess.split('.')[0])