麻烦简单的Python代码

tro*_*000 4 python

我正在学习Python,而我在使用这段简单的代码时遇到了麻烦:

a = raw_input('Enter a number: ')

if a > 0:
    print 'Positive'
elif a == 0:
    print 'Null'
elif a < 0:
    print 'Negative'
Run Code Online (Sandbox Code Playgroud)

它的效果很好,除了它总是打印'正',无论我输入正数还是负数或零.我猜这是一个简单的解决方案,但我找不到它;-)

提前致谢

小智 7

那是因为a输入了一个字符串.用于int()在进行数值比较之前将其转换为整数.

a = int(raw_input('Enter a number: '))
if a > 0:
    print 'Positive'
elif a == 0:
    print 'Null'
elif a < 0:
    print 'Negative'
Run Code Online (Sandbox Code Playgroud)

或者,input()将为您进行类型转换.

a = input('Enter a number: ')
Run Code Online (Sandbox Code Playgroud)


Jus*_*ard 7

因为你正在使用raw_input你得到的值是一个字符串,总是被认为大于0(即使字符串是'-10')

相反,请尝试使用raw_input与字段raw_input值匹配的表raw_input.

类似于:raw_inputschedule_items的raw_input开始raw_input

从哪里开始将是一个raw_input与像数据字段raw_inputraw_input会是这样的:2009-09-23

我可以这样做,还是我需要加载所有值然后爆炸并比较我的DATETIME raw_input字段中的值?

  • input()以这种方式工作的原因是因为用户键入的内容由解释器评估......这是非常不安全的.搜索互联网将提供许多原因,但足以说在try-catch中执行int(raw_input())应该被认为是更好的做法. (4认同)
  • 没错,你可以在这里找到相关的讨论:http://mail.python.org/pipermail/tutor/2003-January/019634.html最初的例子对于让一个刚接触python的人有用.一旦开始考虑错误处理,您将需要验证任何和所有用户输入,此时raw_input(...)将证明更有用. (2认同)

nil*_*amo 7

扩展我对已接受的答案的评论,这是我将如何做到这一点.

value = None
getting_input = True

while getting_input:
    try:
        value = int(raw_input('Gimme a number: '))
        getting_input = False
    except ValueError:
        print "That's not a number... try again."

if value > 0:
    print 'Positive'
elif value < 0:
    print 'Negative'
else:
    print 'Null'
Run Code Online (Sandbox Code Playgroud)


Alv*_*Row 5

raw_input 
Run Code Online (Sandbox Code Playgroud)

返回一个字符串,因此您需要a先将字符串转换为整数:a = int(a)