首页 > 解决方案 > 如果python中不满足条件,有没有办法返回输入?

问题描述

我想做的是这个。

1.用户输入一个数字(例如一个 SSN 或任何识别号码) 2.如果用户不是 14 位,返回输入并重试 3.如果输入是 14 位,继续程序。4.检查 SSN 是否以 1 或 2 开头(在我的场景中,所有男性 ID 都以 1 开头,所有女性 ID 都以 2 开头 5。如果 1 打印男性,如果 2 打印女性。

我的最后一个代码是:

ssn=str(input("SSN: "))
x=len(ssn)
while x != 14:
        print("Wrong digits")
        break
else:
        print("Thank you")
y=str(ssn[0])
if y == 1:
        print("Male")
else:
        print("ok")*

在执行中我得到:

SSN: 12345 错误的数字正常

问题是,如果我输入 12 位数字,这不会中断。它确实说错误的数字,但继续执行。第二个问题是它打印正常,即使我添加了以 1 开头的 1234 并且它应该是男性。

请问有什么想法吗?

标签: python-3.x

解决方案


首先str(input(...))是不必要的,因为输入已经返回一个字符串(为什么将字符串转换为字符串?)。其次,您既不更新ssn也不更新x。第三,while x != 14只有在 x 不等于 14 时才会运行。但是您希望它在x 等于 141 == "1"进行一些处理。第四,将始终为 False。以下代码应该可以工作:

while True: # endless loop
    ssn = input("SSN : ")
    if not ssn.isdigit(): # if the ssn is not a number, stop
        print("not a number")
        continue # let the user try again
    l = len(ssn)
    if len(ssn) != 14:
        print("Wrong digits")
        continue # let the user try again
    else:
        print("Thank you")
        if ssn[0] == "1":
            print("Male")
        else: # This will print Female even if first ID digit is 3 or 4 or whatever, should use elif ssn[0] == "2"
            print("Female")
        break # stop asking again

推荐阅读