【问题标题】:How do I provide error checking to ensure user input only allows letters and provides a looping error message if numbers are typed?如何提供错误检查以确保用户输入仅允许字母并在输入数字时提供循环错误消息?
【发布时间】:2015-12-23 21:33:53
【问题描述】:

我正在尝试向用户提供一条循环错误消息以供用户输入 customerName,以便用户在输入字母 aA - zZ 以外的任何内容时收到错误消息,(我不想让用户输入具体数字)。我希望它的操作类似于我用于 customerAge 输入的操作(我作为示例提供)。但我似乎无法找出正确的代码来完成此操作。谁能提供一些见解?

customerName = input('Enter your name: ')

customerAge = int(input('Enter your age: '))
while customerAge <= 15 or customerAge >= 106:
    print('Invalid entry')
    customerAge = int(input('Enter your age: '))

【问题讨论】:

    标签: python


    【解决方案1】:

    在查看了我收到的所有答案后(感谢大家的帮助)。我是这样编码的,它似乎运行正常。

    customer_name = input('Please enter your name: ')
    while not customer_name.isalpha():
        print('invalid Entry')
        customer_name = input('Please enter your name: ')
    

    【讨论】:

      【解决方案2】:

      正则表达式应该做你想做的事

      import re
      while 1:
          name = raw_input("Enter your name: ")
          if re.search(r'(?i)[^a-z]', name):
              print("Invalid name")
          else:
              break
      

      【讨论】:

      • 为什么是while 1?这看起来是一种不好的做法.. 仅仅因为 bool(1)True,你不应该在任何地方使用它
      • 在 SO 上共享代码时,我希望尽可能简短,以免影响所演示的核心思想的清晰性。这是我的风格偏好。
      【解决方案3】:

      使用type()函数检查每个字符的type

      u_input = raw_input()
      valid = ""
      for char in u_input:
          if str(type(char)) == "<type 'int'>":
              valid = "False"
              break
          else:
              pass
      
      if valid == 'False':
          print 'This string has a number! Gosh darn it!"
      

      把它放在函数/while 循环中,你就会得到循环错误消息。您可以添加其他循环以确保任何其他参数。
      这是最简单的,也可能是最有效的方法。

      更多关于type()的信息在这里:https://docs.python.org/2/library/functions.html#type

      【讨论】:

      • 我们不建议初学者使用 type 来完成平凡的任务
      • @Alvaro 但re.isalpha() 可以吗?
      • 当然,如果字符串只包含字母,isalpha 会返回 True(它还能再重要一点吗?)为此使用 type 不会通过任何认真的审查
      • @Alvaro 没有意识到这一点。妥当注明。但这是一种方法。其他方式都被采取了。如果更高级的 Python 编码器遇到此问题,它可能会很有用。
      【解决方案4】:

      让我们从你的程序需要做的事情开始:

      循环直到输入有效

      这将是各种形式的验证:

      1) 用户插入一些东西

      2) 出了点问题

      3) 程序通知用户并再次要求输入

      所以,在 python 中:

      valid = False
      while not valid:
          valid = True
          customer_name = input('Enter your name: ')
          customer_age = int(input('Enter your age: '))
          if customer_age <= 15 or customer_age >= 106:
               print 'Enter a valid age'
               valid = False
          if not customer_name.isalpha():
              print 'Enter a valid name'
              valid = False
      

      我们在这里做了什么:

      1) 将valid设置为True,这样happy case会让我们跳出循环

      2) 获取两个值

      3)如果其中任何一个无效,将valid设置为False并告知情况

      您甚至可以使用 2 个循环分别进行验证。

      关于 isalpha() 方法的说明:您可以在 this question 中找到文档 here 和一些关于它的好信息

      另外,作为底线建议:永远不要在 python 变量中使用驼峰式大小写。

      该符号是为Class 名称保留的。对于变量,使用小写和_

      【讨论】:

      • " if customer_name == 'invalid name': # 这部分由你决定只能输入字母,不能输入数字。
      • 编辑isalpha()
      • 我认为我掌握的其余代码。但我只是一个刚开始上第一堂课的程序员,所以我对基础知识的理解有限,但我非常感谢你的意见,这很有帮助
      • customer_name = input('请输入您的姓名:') 而不是 customer_name.isalpha(): print('invalid Entry') customer_name = input('请输入您的姓名:')
      • 很高兴听到它,如果合适,请随时接受答案,或者用完整的细节来回答您自己的问题
      猜你喜欢
      • 2016-02-10
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多