【问题标题】:Problems with a basic Python addition script.基本 Python 添加脚本的问题。
【发布时间】:2014-02-15 22:04:51
【问题描述】:

我是 Python 的初学者,我基本上是在尝试为自己制作一个基本的数学程序,并从一个两位数的加法程序开始,每次都带有随机问题,我什至设法把它搞砸了。每次我输入一个正确的答案时,它每次都说它不正确。代码如下:

import random

digit_one = random.randint(0,100)
digit_two = random.randint(0,100)


print "What is %s + %s?" % (digit_one, digit_two)

answer = digit_one + digit_two    

userAnswer = raw_input()

if userAnswer == answer:
    print "Well done that's correct!"

else:
    print "That's incorrect!"

我正在使用 2.7 和内置的 IDLE IDE。我有一种感觉,我应该为此使用一个循环,尽管我知道如果我希望它继续重新加载问题,我以后必须使用一个循环。我会很感激任何帮助,谢谢。

【问题讨论】:

  • @Hyperboreus:见鬼。在字符串上调用intinput 是一个可怕的习惯。
  • @Hyperboreus 我不得不克制将您的评论标记为冒犯性的冲动……但说真的,不。请不要向初学者推荐诸如 python2s inputeval 的任何其他变体之类的东西,而不是非常清楚它所具有的所有安全性和性能影响。尤其是,不要在有完全安全、快速、可读且明显的方式来完成相同任务的情况下这样做(在这种情况下是int)。
  • @l4mpi “攻击性”?我得罪了谁?从我过去的回答中可以看出,我强烈反对使用eval 甚至literal_eval。我个人从不使用input(py2)。但是,在我看来,很多教程似乎都在使用它,因为大多数(或至少很多)初学者问题都使用它。所以我怀疑input 在初学者中很常见,因为你的输入被很好地和神奇地解析了。后来开始学习类型、类型转换、自动装箱、比较、身份等……无意冒犯任何人。
  • @Hyperboreus “攻击性”部分并没有那么严重,因此之后的“但很严肃”。而被“冒犯”的目标群体将是 SO 上处理入门级 python 问题并告诉人们停止使用input/eval 一遍又一遍的每个人;)无论如何,你自相矛盾 - 如果你是强烈反对eval,为什么推荐使用它的input?特别是对于一个应该避免这种坏习惯的初学者。感觉就像一个 C 程序员,面对如何重复语句的问题,推荐 goto 而不是 for...
  • @l4mpi 感谢您的澄清。你说的对。我已删除违规评论。

标签: python python-2.7 conditional


【解决方案1】:
userAnswer = raw_input()

raw_input 返回一个字符串。您需要像这样将其显式转换为int

userAnswer = int(raw_input())

因为您将它与answer 进行比较,后者是int。您可以通过打印这些变量的类型来确认这一点,就像这样

print type(answer), type(userAnswer)

【讨论】:

    【解决方案2】:

    raw_input() 返回一个字符串 (str)。在您的条件中,您正在比较 str 是否等于 answer (int)。

    要解决此问题,您可以将输入转换为 int

    userAnswer = int(raw_input())
    

    【讨论】:

    • 天哪,这太基础了。这个解决方案实际上也短暂地在我脑海中闪过。感谢您的帮助。
    【解决方案3】:

    raw_input 返回一个字符串。将其转换为int 以将其与数字进行比较:

    >>> x = raw_input()
    23
    >>> x
    '23'
    >>> 23
    23
    >>> x == 23
    False
    >>> int(x)
    23
    >>> int(x) == 23
    True
    

    【讨论】:

    • 非常感谢您的帮助。
    【解决方案4】:

    您正在尝试将字符串与整数进行比较。尝试将 'userAnswer' 输入为整数,而不是字符串,如下所示:

    userAnswer = int(raw_input())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多