【问题标题】:Raw_input() & input() react differently in python 2.7?Raw_input() & input() 在 python 2.7 中的反应不同?
【发布时间】:2018-03-12 02:52:34
【问题描述】:

我已经尝试了此代码的两个版本,但最终都给了我不同的结果。有什么原因吗?

Raw_input() 使程序进入无限循环; input() 正常工作

numbers = []
increments = 1

def loop(i, dial):
    while i < dial:
        print "At the top i is %d" % i
        numbers.append(i)

        i += increments
        print "Numbers now: ", numbers
        print "At the bottom i is %d" % i
    return

dial = raw_input('What is dial?  ') # -Code goes berserck
#OR **dial = input('What is dial?  ') -Code acts normal
loop(0, dial)

【问题讨论】:

  • 它们在 2.7 中完全不同 docs
  • input() 是您希望在 Python 2 中避免使用的函数;使用raw_input() 并进行适当的转换(在您的情况下为整数)。
  • 此外,您的dial 变量是str。所以当然你的while 永远不会评估终止。
  • 在询问之前您可以在交互式提示下输入help(input)help(raw_input)。或者您可以在文档的索引中查找两者。学习同时使用help 和索引。

标签: python python-2.7 input


【解决方案1】:

BLUF:在请求用户输入时,不要在 Python 2.7 中使用 input。对存储用户输入的变量使用raw_input,然后使用适当的强制转换(int()float() 等...)。

快速分解 Python 2.7 中发生的事情:

  • raw_input() 返回 str(即“hello world”)
  • input()eval(raw_input()) 的包装器,它试图找出 str 代表什么。 不要用它来解决你的问题。

如果我输入24,就会得到以下结果:

dial = raw_input('Dial: ') # '24'
dial = input('Dial: ') # 24

后者是“eval-uated”到int,因此您的while 将终止。否则,前者会尝试比较 int 以查看它是否小于永远不会终止的 str

你需要做什么:dial = int(raw_input('Dial: '))

【讨论】:

  • 我明白了!感谢您的回答,帮助了一堆!
  • @pstatix:我可以猜到反对票的原因:正如所写,您的回答似乎鼓励人们使用eval(或input)而不是建议更具体(更安全) 转换,如int。 (我没有投反对票,但在意识到这一点后我确实撤回了我的投赞成票。)
  • @abarnert 有人拒绝投票的非常愚蠢的理由。我没有说过要使用eval(或input)。我已经简单地解释了为什么 OP 的代码不能根据他们的 sn-p 工作!
  • @pstatix 试图理解反对票背后的原因已经够难了。试图理解为什么人们认为这些是很好的理由超出了我的理解。几年前我就不再担心分数了,只是让我简单地考虑是扩展还是重写。 (而且,坦率地说,如果你已经看过我大部分答案的长度,所有这些扩展可能不是一件好事......)
【解决方案2】:

input() 将评估用户的输入。所以,如果我输入 5 作为用户输入,input() 会让 python 知道用户输入 5 实际上是一个整数。

raw_input() 不会这样做。它将接受用户输入的任何内容并将其转换为字符串。因此,如果您使用raw_input(),用户输入5 将实际为"5"

【讨论】:

    【解决方案3】:
    • input():解释和评估输入,这意味着如果用户输入整数,则返回整数,如果用户输入字符串,则返回字符串。

    • raw_input(): raw_input() 准确获取用户输入的内容并将其作为字符串传回。它不会解释用户输入。即使输入整数值 10 或输入列表,它的类型也只会是字符串。

    【讨论】:

    • 明白了!现在一切都清楚了,谢谢,非常感谢!
    猜你喜欢
    • 2012-07-01
    • 2019-03-10
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多