如何将浮点字符串转换为python中的整数3
我是新来的整个编码的东西......所以这里。 只是试图写一个简单的数字猜测游戏,但也做输入验证。所以只有整数才被接受为输入。我已经想出了如何去除字母字符,所以我可以将数字转换为整数。当我输入一个浮点数时,我遇到了麻烦。我无法得到它将浮点数转换为整数。任何帮助表示赞赏。正如我所说的,我正在谈论这个编码事物的第3天,所以试着理解我的小知识。提前致谢。如何将浮点字符串转换为python中的整数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
如果你想处理与其他类型故障不同的实际字词,例如,因此您可以打印更具体的错误信息,然后您可以在except
子句中检查isalpha
。
如果要处理检查它是否为浮点数,以便发出不同的错误,请执行同样的操作-以调用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.")
您可以尝试使用try-except来链接转换。如果你的int()转换产生一个ValueError异常,你可以尝试使用float()转换输入,然后将你的浮点值舍入或截断为整数。 – nullop 2014-11-20 20:24:16
几个方面的说明:你几乎从不想检查'如果垃圾邮件==假:',只是'如果不是垃圾邮件:'。在'elif'中,你不需要重新检查'if'测试的反面 - 你已经知道'isalpha'是真的,因为你知道它不是假的。所以,只需使用'else:'。如果你从这个函数返回'userGuess',你几乎可以肯定不需要它是'global'。最后,你不需要为了“返回”而“休息”;你可以在'if'块中直接返回'userGuess'。 – abarnert 2014-11-20 20:27:39