8

如果将小数(例如 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

然后它移动到“else”,即使我将输入作为49.8.

4

5 回答 5

12

正如其他答案所提到的,int如果字符串输入不能转换为 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,然后浮点数,否则返回字符串。这只是查看可转换类型的一般示例。如果您的值从该函数中返回仍然是一个字符串,那将是一个错误,然后您需要向用户报告并要求新的输入。

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?
于 2012-08-18T17:57:35.103 回答
5

int() 适用于看起来像整数的字符串;对于看起来像浮点数的字符串,它将失败。改为使用float()

于 2012-08-18T17:43:21.963 回答
2

整数(int简称)是您用 0、1、2、3 ... 计算的数字,以及它们的负数 ... -3、-2、-1 是没有小数部分的数字。

因此,一旦您引入了小数点,您就不会真正处理整数。你正在处理有理数。Python float 或decimal类型是您想要表示或近似这些数字的类型。

您可能习惯于自动为您执行此操作的语言(Php)。然而,Python 有一个明确的偏好,即强制代码是显式的而不是隐式的。

于 2012-08-18T17:49:28.300 回答
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

在此,我首先将 number 字符串化str(),将其转换为无法操作的数字。然后,我int()将它整数化,使其成为一个可操作的数字。我刚刚在我的 IDLE GUI 上测试了你的问题,它说 49.8 < 50。

于 2014-02-17T01:47:08.307 回答
1

使用float()代替int()以便您的程序可以处理小数点。另外,不要使用next() ,next因为它是Python 的内置函数

此外,您发布的代码丢失import sys并且定义为dead

于 2012-08-18T17:46:09.047 回答