【问题标题】:python int( ) functionpython int() 函数
【发布时间】:2012-08-18 17:41:14
【问题描述】:

如果将十进制 (例如 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”。

【问题讨论】:

  • 你可能想说how_much = int(float(...))how_much = int(round(float(...)))
  • 小注:next 不是 var 名称的好选择,因为自 python 2.6 以来就有一个内置函数 next()
  • 你在这里是因为这个。 learnpythonthehardway.org/book/ex35.html

标签: python int


【解决方案1】:

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

如果它既不是 float 也不是 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?

【讨论】:

  • 如果我不使用 int() 或 float() 而只使用 how_much=next 那么即使我将输入设为 49.8,它也会移动到“else”
  • 因为你在比较字符串然后:"49.8" &lt; 50
  • 我有一个错字,忘记在第二个中输入None。刚刚修好了。
  • 赤裸裸是邪恶的。 except ValueError 可能是一个更好的主意。
  • @jdi:任何事情都可以提高KeyboardInterrupt。用户可以随时按Ctrl+C。
【解决方案2】:

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

【讨论】:

  • 为什么int()将输入转换为整数?
  • 因为它不能被解释为整数。
【解决方案3】:

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

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

您可能已经习惯了一种自动为您执行此操作的语言 (Php)。不过,Python 有一个明确的偏好,即强制代码为 explicit instead implicit

【讨论】:

  • 如果我不使用 int() 或 float() 而只使用 how_much=next 那么即使我将输入设为 49.8,它也会移动到“else”
  • 那是因为how_much 然后变成了一个字符串。我什至不认为这会奏效。
【解决方案4】:
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

【讨论】:

  • 您的代码产生了正确的结果,但对于该任务来说太长了。
【解决方案5】:

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

此外,您发布的代码缺少import sysdead 的定义

【讨论】:

  • 为什么int()将输入转换为整数?
  • @ShubhamAgrawal 它无法将带小数点的东西转换为 int,它需要得到一个看起来像 int 的字符串。
  • @ShubhamAgrawal 你能告诉我们你的目标以及为什么float() 不是一个可接受的解决方案吗?
  • float() 是一个可接受的解决方案。如果我的字体使用 float() 或 int() 那么为什么 python 不识别输入的类型并检查它是否小于或大于 50?
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多