我想让它打印出日期并停止,但它会继续打印"输入:"即使存在";中断";它成功地打印出了日期。
while True:
user = input("Enter: ")
if "/" not in user:
if "," in user:
date = user.replace(",", "")
date = date.split(" ")
date = list(date)
for i in range(len(date)):
if date[i] in month:
mnth = month[f"{date[i]}"]
if int(date[1]) < 10:
date[1] = "0" + date[1]
print(f"{date[2]}-{mnth}-{date[1]}")
break
由于只能直接突破最内部的循环,因此需要使用一个变量来通知外部循环停止。
done = False
while not done:
user = input("Enter: ")
if "/" not in user:
date = user.replace(",", "")
date = date.split(" ")
for i in range(len(date)):
if date[i] in month:
mnth = month[f"{date[i]}"]
if int(date[1]) < 10:
date[1] = "0" + date[1]
print(f"{date[2]}-{mnth}-{date[1]}")
done = True
break
我还去掉了不需要的date = list(date)
。
不应该执行if "," in user:
检查,因为如果没有要替换的,
,则永远不会设置date
。只需调用replace()
,如果没有任何,
,它将返回不变的字符串。
在不添加额外变量的情况下从内循环中断外循环的一种方法是使用else: continue
和break
:
while True:
user = input("Enter: ")
if "/" not in user:
if "," in user:
date = user.replace(",", "")
date = date.split(" ")
date = list(date)
for i in range(len(date)):
if date[i] in month:
mnth = month[f"{date[i]}"]
if int(date[1]) < 10:
date[1] = "0" + date[1]
print(f"{date[2]}-{mnth}-{date[1]}")
break
else:
continue # continue if the for loop wasn't broken
break # break the while if we didn't continue
正如评论中所解释的,诀窍是如果没有break
,则for
的else
执行——因此,当且仅当for
内部没有break
时,我们可以continue
执行while
,否则,明确地break
执行while
。
与此没有直接关系,我建议通过在循环的其他地方使用continue
来对抗一些缩进,并消除所有不必要的字符串操作(注意使用{date[1]:0>2}
将零填充到两位数,而不需要int数学——neat,嗯?(:
while True:
user = input("Enter: ")
if "/" in user:
continue
date = user.replace(",", "").split(" ")
for mm in date:
if mm not in month:
continue
print(f"{date[2]}-{mm}-{date[1]:0>2}")
break
else:
continue
break
由于您的代码似乎假设date[2]
始终是年,date[1]
始终是月的第几天,我将冒险猜测,如果有什么不同的话,您也可以放心地假设月始终是date[0]
,这意味着您可以跳过整个内部循环,只需执行:
while True:
user = input("Enter: ")
if "/" in user:
continue
mm, dd, yyyy = user.replace(",", "").split(" ")[:3]
if mm not in month:
continue
print(f"{yyyy}-{mm}-{dd:0>2}")
break