如何检测到无效的输入并使用户陷入循环,直到键入可接受的答案?

时间:2019-04-01 01:48:26

标签: python

我正在尝试弄清楚如何使用户键入字母并仅将数字作为无效输入返回。

这是我的代码,我仍然不清楚ValueError,就好像我在运行代码并输入字母一样,它会作为无效输入出现,但是如果我输入数字,则它会变成有效输入。

while True:
    try:

        name = int(input("What is your name? "))
    except ValueError:
        print("Invalid response. Letters only please.")
        continue
    else:

        break

    correctName = input("Your name is...'" + (name) + "', is this correct? \n Please use 'Y' as yes and 'N' as no.\n")
    if correctName == "Y":
        print("Thank you..!")

3 个答案:

答案 0 :(得分:0)

int(input())将期望一个整数作为输入,因此在键入名称时(除非您的名字完全由数字组成),您将得到一个ValueError,就像您现在正在体验的那样。相反,您可以使用str(input())来获取用户输入,然后使用str.isdigit()方法来检查它是否为数字。

name = str(input("What is your name? "))
if name.isdigit():
    print("Invalid response. Letters only please.")
    continue
else:
    break

答案 1 :(得分:0)

您还可以尝试使用正则表达式来检查字符串是否包含数字:

bool(re.search(r'\d', name))

\d将匹配数字[0-9]。

如果字符串包含数字,它将返回 True

完整代码:

import re
while True:
        name = input("What is your name? ")
        if bool(re.search(r'\d', name)):
            print("Invalid response. Letters only please.")
        else:
            correctName = input("Your name is...'" + (name) + "', is this correct? \n Please use 'Y' as yes and 'N' as no.\n")
            if correctName == "Y":
                print("Thank you..!")
                break

答案 2 :(得分:0)

对于Python3

while True:
  name = input()
  if name.isalpha():
    break

对于Python2

while True:
  name = str(input())
  if name.isalpha():
    break