如果将小数(例如49.9)发送到next
变量,则下面的代码显示错误。你能告诉我为什么吗?为什么int()
会将其转换为整数?
next=raw_input("> ")
how_much = int(next)
if how_much < 50:
print"Nice, you're not greedy, you win"
exit(0)
else:
dead("You greedy bastard!")
如果我不使用int()
或float()
,只需使用:
how_much=next
然后即使我将输入设为49.8
,它也会移至“else”。
答案 0 :(得分:12)
正如其他答案所提到的,如果字符串输入不能转换为int(例如float或字符),int
操作将崩溃。您可以做的是使用一个小帮助方法来尝试为您解释字符串:
def interpret_string(s):
if not isinstance(s, basestring):
return str(s)
if s.isdigit():
return int(s)
try:
return float(s)
except ValueError:
return s
所以它需要一个字符串并尝试将其转换为int,然后浮点数,否则返回字符串。这更像是查看可转换类型的一般示例。如果您的值从该函数中返回仍然是一个字符串,那么您将需要向用户报告并请求新输入,这将是一个错误。
如果它既不浮动也不是int,可能会返回None
的变体:
def interpret_string(s):
if not isinstance(s, basestring):
return None
if s.isdigit():
return int(s)
try:
return float(s)
except ValueError:
return None
val=raw_input("> ")
how_much=interpret_string(val)
if how_much is None:
# ask for more input? Error?
答案 1 :(得分:4)
int()
仅适用于看起来像整数的字符串;对于看起来像浮点数的字符串,它会失败。请改用float()
。
答案 2 :(得分:2)
整数(简称int
)是你用0,1,2,3 ......计算的数字和它们的负数对应物...... -3,-2,-1没有小数部分的数字
所以一旦你引入了一个小数点,你就不会真正处理整数。你正在处理有理数的问题。 Python float或decimal类型是您想要表示或接近这些数字的类型。
您可能习惯于自动为您执行此操作的语言(Php)。但是,Python明确倾向于强制代码为explicit instead implicit。
答案 3 :(得分:2)
import random
import time
import sys
while True:
x=random.randint(1,100)
print('''Guess my number--it's from 1 to 100.''')
z=0
while True:
z=z+1
xx=int(str(sys.stdin.readline()))
if xx > x:
print("Too High!")
elif xx < x:
print("Too Low!")
elif xx==x:
print("You Win!! You used %s guesses!"%(z))
print()
break
else:
break
在这里,我首先将数字str()
串起来,将其转换为不可操作的数字。然后,我int()
将它整合,使其成为一个可操作的数字。我刚刚在我的IDLE GUI上测试了你的问题,它说49.8&lt; 50。
答案 4 :(得分:1)
使用float()代替int(),以便您的程序可以处理小数点。另外,请勿使用next
,因为它是built-in Python function, next()。
此外,您发布的代码缺少import sys
以及dead