python-3.x - 如果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 并且它应该是男性。
请问有什么想法吗?
解决方案
首先str(input(...))
是不必要的,因为输入已经返回一个字符串(为什么将字符串转换为字符串?)。其次,您既不更新ssn
也不更新x
。第三,while x != 14
只有在 x 不等于 14 时才会运行。但是您希望它在x 等于 14时1 == "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
推荐阅读
- r - 使用 gganimate 时小提琴图的定位
- python - 如何在 django 的表单中检索以前输入的数据?
- angular - 迁移 rxjs 5 到 6 个问题
- c# - 在存储过程 asp.net MVC 上获取产品
- azure - 将带有引用的 json 作为单个对象返回?
- java - 打包在可执行 jar 中的可写数据库
- java - 如何删除列表中的重复对象
不使用任何集合和循环 - javascript - 单选按钮 HTML - materlizeCSS
- python-3.x - Python Pandas:将特定行的几列从一个数据帧复制到另一个具有不同名称的数据帧
- javascript - 将 then 附加到调用堆栈中的多层承诺的最佳解决方案是什么?