尝试退出 While True 循环,但它不会



我想让它打印出日期并停止,但它会继续打印"输入:"即使存在";中断";它成功地打印出了日期。

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: continuebreak:

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,则forelse执行——因此,当且仅当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

最新更新