【问题标题】:Integer and string conflicts整数和字符串冲突
【发布时间】:2012-05-23 01:28:30
【问题描述】:

目前我正在处理一项任务,该任务要求我创建一个程序,用户在该程序中输入一个 0-4 之间的数字。然后程序检查用户输入的数字并输出特定的字符串。比如用户输入4,程序会输出“80以上:Level 4”

问题是用户也应该能够退出程序。我决定创建程序,所以如果用户输入的内容不是空白的(当输入!=“”:) 程序将运行,但如果他们决定点击进入程序将结束。

这是我到目前为止想出的代码:

def get_level():
    level = raw_input("Enter a number from 0-4 (Press <Enter> to quit): ")
    return level

def check_mark(level):
    if int(level) == 4:
        print "80 or above: Level 4"
    elif int(level) == 3:
        print "70 - 79: Level 3"
    elif int(level) == 2:
        print "60 - 69: Level 2"
    elif int(level) == 1:
        print "50 - 59: Level 1"
    elif int(level) == 0:
        print "Below 50: Level 0"
    else:
        print "ERROR: out of range"

def output(level):
   while level != "":
        level = raw_input("Enter a number from 0-4 (Press <Enter> to quit): ")
        check_mark(level)
        print

def main():
    user_level = get_level()
    user_mark = check_mark(user_level)
    print
    program_output = output(user_level)

main()

我很清楚问题与 raw_input 只接受激活“while level !=”“:”语句的字符串这一事实有关。我尝试通过在每个级别之前放置 int() 运算符来解决这个问题。问题是如果用户输入空白,它会与输入冲突,因为它会检查输入是否为整数。反正就是这样。

所以我希望有人能指导我找到解决这个问题的方法。将不胜感激!

【问题讨论】:

    标签: python string loops integer raw-input


    【解决方案1】:

    你可能想要下一个循环代码:

    def output(level):
       level = raw_input("Enter a number from 0-4 (Press <Enter> to quit): ")
       while level != "":
            check_mark(level)
            level = raw_input("\nEnter a number from 0-4 (Press <Enter> to quit): ")
    

    【讨论】:

    • 两倍(几乎)相同的raw_input(…) - 即使它有效,它看起来也不是很优雅。
    • 啊,现在感觉真傻。当简单的重新排列就可以解决问题时,我不应该尝试使代码如此结构化。无论如何,从现在开始,在我提出问题之前,我一定会多想。感谢您的帮助:)
    【解决方案2】:

    我不认为验证输入有任何捷径。所以用户可以输入“”或整数。如果用户输入字母会怎样?

    我会验证所有输入以进行相应处理,这样程序就不会中断

    # check for blank
    if level == '':
      # exit for user
    
    # validate input if not exit
    try:
      level_int = int(level)
    except ValueErrror:
      # integer not inputed
    
    if not (0 <= level_int <= 4):
      # check that input is between 0  4
      # out of range
    

    或者您可以在 main 中调用时检查 check_mark 中的预期

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2015-12-06
      • 1970-01-01
      相关资源
      最近更新 更多