Python中while循环能否设置多值哨兵值?循环异常问题求助
如何实现多哨兵值的while循环(解决无限循环问题)
你的代码出现无限循环的核心问题是while条件的逻辑错误:while favorite != 'done' or 'quit' 这行代码里,'quit'是一个非空字符串,在Python的布尔判断中会被直接判定为True。不管favorite的值是什么,整个条件都会变成「某个值 or True」,结果永远是True,循环自然停不下来。
正确实现方式
方式一:用not in判断哨兵集合
把两个终止值放在一个集合(或列表)里,判断输入不在这个集合内就继续循环,写法更简洁直观:
favorites = dict() name = input('What is your name?\n') favorite = input('What favorite do you want to enter? (quit or done to end)\n') while favorite not in {'done', 'quit'}: favorite_item = input(f'What is your favorite {favorite}?\n') favorites[favorite] = favorite_item favorite = input('What favorite do you want to enter? (quit or done to end)\n')
方式二:明确逻辑判断(用and连接)
如果不想用集合,也可以把两个判断条件用and连接,表示必须同时不满足两个终止条件才继续循环:
favorites = dict() name = input('What is your name?\n') favorite = input('What favorite do you want to enter? (quit or done to end)\n') while favorite != 'done' and favorite != 'quit': favorite_item = input(f'What is your favorite {favorite}?\n') favorites[favorite] = favorite_item favorite = input('What favorite do you want to enter? (quit or done to end)\n')
额外优化:减少重复代码
可以把重复出现的输入提示提取成变量,让代码更简洁易维护:
favorites = dict() name = input('What is your name?\n') prompt = 'What favorite do you want to enter? (quit or done to end)\n' favorite = input(prompt) while favorite not in {'done', 'quit'}: favorite_item = input(f'What is your favorite {favorite}?\n') favorites[favorite] = favorite_item favorite = input(prompt)
内容的提问来源于stack exchange,提问作者Samantha Groenwold
相关产品推荐
相关产品推荐

