Python打破嵌套的for循环并重新启动while循环

Posted

技术标签:

【中文标题】Python打破嵌套的for循环并重新启动while循环【英文标题】:Python break a nested for loop and restart the while loop 【发布时间】:2020-05-21 04:39:00 【问题描述】:

我创建了一个小while 循环来检查列表中的任何特殊字符是否在文件夹的名称中。 我想让它在检测到的第一个字符处停止迭代 for 循环并重新启动 while

folder_set = False
while folder_set == False:
    inacceptable = ['.', ',', '-', '(', ')', '*', '²', '=', '^', '$', ';', 
    ':', '!', '§', '?', '/', '', '']
    folder = input('Enter folder here: ').lower()
    for i in inacceptable:
        if i in folder:
            print(f'Your folder name has a special character i, please make 
            sure the folder name does not contain any special character:\n " 
            ".join(inacceptable), or any other special character.')
            folder_set == False
            breakloop = 'continue'
            continue
    folder_path = os.path.join(os.getcwd(), str(folder))
    if os.path.isdir(folder_path) == True:
        confirmation = input('Folder already exists, would you like to save 
        your files in it? (yes/no) ', )
    if confirmation.lower() == 'yes':
        folder_set = True
    else:
        folder_set = True

但它不起作用。你能解释一下为什么吗? 此外,如果我尝试打印 breakloop 变量,我会收到错误 breakloop not defined

【问题讨论】:

您需要将folder_set 设置为true,以便在满足条件且其中还有错字的情况下中断while 循环。 我希望打破 for 循环而不是 while 您根本不需要 for 循环。使用集合交集:bad=set(inacceptible) & set(folder); if bad: folder_set=True; print(bad)(注意在一个作业中有一个 =)。 使用break 而不是continue 来打破循环。如果 breakloop 未定义,则意味着其中一个 for 没有任何可迭代的内容,如果从未为真,则您正试图在其范围之外使用 breakloop 【参考方案1】:

我不是很喜欢 Python,但我建议你制作 folder_set = true 或删除它,因为你将它设置为 false 并且如果 while 为 false 则意味着它永远不会进入它进行迭代,我建议的其他事情是:

inacceptable = ['.', ',', '-', '(', ')', '*', '²', '=', '^', '$', ';', ':', '!', '§', '?', '/', '', '']
folder = input('Enter folder here: ').lower()
for i in inacceptable:
    if i in folder:
        print(f'Your folder name has a special character i, please make sure the folder name does not contain any special character:\n " ".join(inacceptable), or any other special character.')
        break

希望对你有帮助!

【讨论】:

【参考方案2】:

我不知道这是您粘贴代码的方式有误,还是原来也有。但是,while 循环之后的代码没有缩进。好的,所以你在编辑中修复了这个问题。

你不需要在 for 循环中继续,而是在那里中断并删除行 folder_set == False

然后,添加一个变量breakloop,在while 循环开始后定义为True。它必须在 for 循环中设置为 False,而不是 folder_set。在for循环之后,检查breakloop和break。最终代码:

unacceptable = ['.', ',', '-', '(', ')', '*', '²', '=', '^', '$', ';', ':', '!', '§', '?', '/', '', '']

while True:
    breakloop = True
    folder = input('Enter folder here: ').lower()

    for i in unacceptable:
        if i in folder:
            print("Your folder name has a special character " + i + ", please make sure the folder name does not contain any special characters from:\n " + ' '.join(unacceptable) + ", or any other.")
            breakloop = False
            break

    if breakloop:
        break

编辑:我编辑了您的打印语句并将un移到了 while 循环之外,它不必为每次迭代重新定义。

【讨论】:

@MehdiRezzagHebla 如果解决了您的问题,请投票并将答案标记为已接受(单击对勾)。谢谢。

以上是关于Python打破嵌套的for循环并重新启动while循环的主要内容,如果未能解决你的问题,请参考以下文章

如何打破 Objective-C 中的两个嵌套 for 循环?

2022年最新Python大数据之Python基础

如何打破 Dart 中的嵌套循环

打破嵌套循环和主循环[重复]

如何打破 Java 中的嵌套循环?

打破 JavaScript 中嵌套循环的最佳方法是啥?