【问题标题】:Python calculator concatenates instead of preforming operationsPython 计算器连接而不是执行操作
【发布时间】:2013-11-21 23:17:46
【问题描述】:

我是 Python 新手,我正在尝试编写一个计算器。问题是我找不到让变量num1num2 执行我为它们列出的操作的方法。他们所做的只是连接两个数字而不是执行操作,有什么建议吗?谢谢。

letter = ()

class Calc():

     print raw_input("What operation do you want to do?\n\tA) Addition\n\tB) Subtraction\n\ ")
     num1 = raw_input("Please enter your first number: ")
     num2 = raw_input("Please enter your second number: ")

     if letter == 'A' or 'a':
        print "The sum of", num1, "plus", num2, "equals"
        print num1 + num2
     elif letter == 'B' or 'b':
        print "The difference of", num1, "minus", num2, "equals"
        print num1 - num2

【问题讨论】:

  • 两个错误。首先,您不会将字符串解析为整数或浮点数,因此 Python 将 + 解释为字符串连接。其次,letter == 'A' or 'a' 并不意味着“如果字母是其中之一”。它表示(letter == 'A') or 'a',它始终为真,因为'a' 在布尔上下文中为真。

标签: python class calculator


【解决方案1】:

raw_input 返回一个字符串,因此您的两个输入是连接的。在使用数字运算符之前,您需要将该输入转换为数字。

num1 = int(raw_input("Please enter your first number: "))

您可以使用floatint 将输入字符串转换为数字。

你也需要改变

if letter == 'A' or 'a':

if letter == 'A' or letter == 'a':

【讨论】:

  • if letter in ['A','a']: 会更 Pythonic 吗?
  • @darthbith 集合文字优于列表文字,但几乎可以肯定最好说 if letter.lower() == 'a'
  • @darthbith 这可能有点 Pythonic。正如 roippi 指出的那样,在这种情况下还可以使用 lower() 和 upper() 函数。
  • @roippi 所以应该是if letter in {'A','a'}:?为什么这比列表更好?进一步阅读的链接也很好,我在快速谷歌搜索中找不到任何东西:-) 谢谢!是的,lower()upper() 函数更容易解析!
  • @darthbith 整个答案有点太长,无法放入评论框中。基本上,集合文字是 constants 的声明 - in 查找是常量时间而不是线性时间,编译器可以做更多的编译时魔法。这就是它实际的一面。不太实际,这正是集合的用途 - 当您不关心订单时的成员资格测试。它们是工作的工具。
【解决方案2】:

您正在使用 原始输入() 它将输入转换为字符串。

如果你想把它们加在一起,你想使用 num1 = float(num1)

添加之前。

【讨论】:

    【解决方案3】:

    这是因为您正在执行字符串操作。 raw_input 返回 string,因此您必须手动将其转换为 intfloat,使用:float()int()

    这样做:

    print int(num1) + int(num2) 以打印加法形式的数字。

    【讨论】:

      【解决方案4】:

      我认为这会满足您的要求:

      letter = raw_input("What operation do you want to do?\n\tA) 
               Addition\n\tB)Subtraction\n")
      num1 = input("Please enter your first number: ")
      num2 = input("Please enter your second number: ")
      if letter == 'A' or 'a':
         print "The sum of", num1, "plus", num2, "equals"
         print num1 + num2
      elif letter == 'B' or 'b':
         print "The difference of", num1, "minus", num2, "equals"
         print num1 - num2
      

      【讨论】:

      • 这并不能解决“或”问题(OP 从未注意到 str - str 会因此而失败),并建议某人使用更危险的 input 而不是 raw_input 是可能不是最好的选择。
      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多