2010-10-19 66 views
3

我一直在试图解决这一一会儿,似乎无法使其工作的权利..这是我目前的工作如何确定何时输入字母?

while True: 

    guess = int(raw_input('What is your number?')) 

    if 100 < guess or guess < 1: 
     print '\ninvalid' 

    else: 
     .....continue on 

现在我已经说得那么当用户输入一个数字越大超过100或低于1时,打印出“无效”。但如果我想这样做,当用户输入一个不是数字的字符串(字母,标点等)时,它也会返回这个“无效”消息?

我曾考虑过如果不是... isdigit(),但它不会工作,因为我得到的猜测作为一个整数为了上述范围的工作。尝试/除了是我想过的另一个选项,但仍然没有想出如何正确实现它。

+2

你也可以做'if 1 <= guess <= 100:' – Daenyth 2010-10-19 16:28:49

回答

6

可以使用异常处理:

try: 
    guess = int(raw_input('What is your number?')) 
    if not (1 <= guess <= 100): 
     raise ValueError 
    # .....continue on 
except ValueError: 
    print '\ninvalid' 

这样,\ninvalid将如果用户要么输入一个非数字串或输入数字串大于100或小于1

印刷

编辑:好的,我提交到x < y < z语法。不过,当它与not一起使用时,仍然认为它失去了一些魅力。

+1

哇谢谢你Frederic你的代码似乎简单得多。虽然我从来没有学过python中的“raise”,但在什么情况下你可以使用它?它如何受益?谢谢!并感谢所有捐助者 – neogeo 2010-10-19 09:49:26

+0

@neogeo,'raise'允许你自己抛出异常(参见[http://python.about.com/odtingstarted/ss/begpyexceptions_7.htm](http://python。 about.com/od/gettingstarted/ss/begpyexceptions_7.htm))。在你的情况下,如果传递的值不是数字,那么'int()'会引发'ValueError'。如果我们通过提高'ValueError'来扩展该行为,如果该值是数字,但在我们的域之外,我们可以同时处理同一地点的两个错误情况。 – 2010-10-19 09:55:36

5
while True: 
    try: 
    guess = int(raw_input("...")) 
    except EOFError: 
    print "whoa nelly! EOF? we should probably exit" 
    break # or sys.exit, or raise a different exception, 
    # or don't catch this at all, and let it percolate up, 
    # depending on what you want 
    except ValueError: 
    print "illegal input: expected an integer" 
    else: 
    if not (1 <= guess <= 100): 
     print "out of range" 
    else: 
     print "processing guess... (but if it wasn't 42, then it's wrong)" 
     break # out of while loop after processing 
+0

+1,用于在'try'和'except'之间放置最少数量的行,并且使用'1 <= guess <= 100'语法。 – EOL 2010-10-19 12:22:20

+0

我喜欢弗雷德缺少重复,但是在这里有更多的Pythonic比特。 ('x 2010-10-19 15:04:55

+0

@Nick:通常你会处理*非法*输入(即不是数字)与*无效*输入不同(即超出范围),即使只是告诉用户更多的信息。一旦发生,就不会有重复。 (注意空格:在“非法”/“无效”中区分术语并不重要,我甚至没有遵循上述原则,除非另有规定,否则我不认识任何人。技术/标准规格中的相同想法)。 – 2010-10-19 15:09:18

相关问题