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循环的主要内容,如果未能解决你的问题,请参考以下文章