【问题标题】:How do I determine input as an integer and the length, simultaneously?如何同时将输入确定为整数和长度?
【发布时间】:2016-06-29 04:46:29
【问题描述】:

好的,所以我对编程真的很陌生。我的程序要求用户输入一个“3位数字”......我需要在测试的同时确定数字的长度(确保它不少于3位数)以确保它是一个整数。这就是我所拥有的:

while True:
    try:
        number = int(input("Please enter a (3 digit) number: "))
    except:
        print('try again')
    else:
        break

感谢任何帮助! :)

【问题讨论】:

  • 012 算作 3 位数字还是 2 位数字?您总是可以将数字转换回字符串并查看长度:len(str(number))。此外,您还必须对 12.3 等情况进行额外验证(isdigit 在这里很方便)。

标签: python loops integer


【解决方案1】:

你可以在你的 try/except 子句中尝试这样的事情。根据需要进行修改。

number_string = input("Please enter a (3 digit) number: ")
number_int = int(number_string)
number_length = len(number_string)
if number_length == 3:
    break

如果数字的长度不是 3,您还可以使用 assert 引发异常。

try:
    assert number_length == 3
except AssertionError:
    print("Number Length not exactly 3")

【讨论】:

    【解决方案2】:

    input() 返回一个字符串。所以你可以先检查那个数字的长度,长度不是3,然后你可以再次询问用户。如果长度为 3,那么您可以将该字符串用作 int() 的数字。 len() 给你字符串的长度。

    while True:
        num = input('Enter a 3 digit number.')
        if len(num) != 3:
            print('Try again')
        else:
            num = int(num)
            break
    

    【讨论】:

    • 另外,如果你想在 python 2.x 中使用同样的东西,你应该使用 'raw_input()' 而不是 'input()'。因为 python 不向后兼容,所以经常出现问题。如果有帮助,您也可以对答案进行投票。
    【解决方案3】:

    将输入保存在变量中,然后再将其转换为 int 以检查其长度:

    my_input = input("Please enter a (3 digit) number: ")
    if len(my_input) != 3:
        raise ValueError()
    number = int(my_input)
    

    请注意,except: 本身就是 bad practice。您应该针对您的异常。

    【讨论】:

      【解决方案4】:
      while True:
          inp = raw_input("Enter : ")
          length = len(inp)
          if(length!=3):
              raise ValueError
          num = int(inp)   
      

      如果您使用的是 Python 2.x,请不要使用 input。始终使用raw_input

      如果您使用的是 Python 3.x,那很好。

      Read Here

      【讨论】:

        【解决方案5】:

        应该这样做:

        while True:
            try:
                string = input("Please enter a (3 digit) number: ")
                number = int(string)
                if len(string) != 3 or any(not c.isdigit() for c in string):
                    raise ValueError()
            except ValueError:
                print('try again')
            else:
                break
        

        【讨论】:

          猜你喜欢
          • 2013-05-30
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          • 2012-04-24
          • 1970-01-01
          • 2021-09-14
          • 2019-03-16
          • 1970-01-01
          相关资源
          最近更新 更多