【问题标题】:i get correct output while compiling with 'python' but not with 'python3'我在使用“python”而不是“python3”编译时得到正确的输出
【发布时间】:2012-10-20 15:01:36
【问题描述】:

在下面的python代码中

    var=input("Enter a number between 1 to 10:")
    if (var==1 or var==2 or var==3 or var==4 or var==5):
          print ('the entered number is between 1 to 5')
    elif (var==6 or var==7 or var==8 or var==9 or var==10):
          print ('The entered number is between 5 to 10')
    else:
          print ('Wrong value exiting!!')

当我在终端运行它时~$ python name.py

输入一个介于 1 到 10:3 之间的数字

输入的数字在 1 到 5 之间

当我在终端运行它时~$ python3 name.py

输入一个介于 1 到 10:3 之间的数字

错误值退出!!

有什么不同? & 当我用 python3` 编译时,为了得到正确的输出,我必须改变什么?


有没有更简单的比较方法,而不是使用 "or" 每个数字?

【问题讨论】:

    标签: python python-3.x python-2.7


    【解决方案1】:

    在 Python 2 中:

    var=input("Enter a number between 1 to 10:")
    

    上面对表达式求值,所以它以var 结尾可能等于一个数字。 (并且确实应该避免使用注释)

    在 Python 3 中,input 是等价的。 raw_input 在 Python 2 中,所以它返回一个字符串 - 如果您希望它是一个数字,您需要执行 var = int( input("...") ) 并注意可能发生的任何转换错误:

    in 运算符:

    if var in (1, 2, 3, 4, 5):
        pass
    elif var in (6, 7, 8):
        pass
    else:
        pass
    

    或者,如果你想要一个 between 操作,你可以使用 Python 逻辑系统:

    if 1 <= var <= 5:
        pass
    

    【讨论】:

      【解决方案2】:

      我相信这是由于您使用了input - 在 Python 3.x 中,它与 Python 2.x 中的 raw_input 相同,这意味着它将其转换为字符串而不是整数.至于您的比较,您可以尝试使用range

      var=int(input("Enter a number between 1 to 10:"))
      
      if var in range(1, 6):
            print ('the entered number is between 1 to 5')
      elif var in range(6,11):
            print ('The entered number is between 5 to 10')
      else:
            print ('Wrong value exiting!!')
      

      【讨论】:

      • 要获取input()的旧行为,可以使用eval(input())
      • @PaoloMoretti 看在上帝的份上,不要给 OP 想法!
      • @MarkusUnterwaditzer 哈哈,在我在这个网站上看到了所有针对eval 的警告之后,我什至害怕输入它。
      • 至少 - ast.literal_eval(input())
      • @Markus 你说得对,我只是引用官方py3k release notes。使用eval() 确实是一种不好的做法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多