python int()函数

时间:2012-08-18 17:41:14

标签: python int

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

5 个答案:

答案 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

的定义