Python实现列表随机选值:首选项优先,不满足条件则重选
需求实现方案
你需要的「首次优先取sname值、不满足条件再随机选其他列表项」的逻辑可以按如下方式实现,同时优化了原有海象运算符嵌套写法的可读性问题:
import random # 单独完成输入赋值,无需在append方法内嵌套海象运算符 fname = input('What is your first name? ') residence = input('Where do you live? ') sname = input('What is your surname? ') clues = [fname, residence, sname] choice = sname # 首次选择优先取sname项,符合需求 while choice != 'smores': # 过滤掉已经验证不通过的当前值,从剩余选项里随机选,保证每次选的是不同项 available_options = [opt for opt in clues if opt != choice] # 所有选项都遍历完仍不符合条件时终止循环,避免死循环 if not available_options: choice = '' break choice = random.choice(available_options)
实现说明
- 原有在
append()内嵌套海象运算符的写法虽然能跑,但可读性很差,单独给输入变量赋值后再组装列表是更通用、易维护的写法,也不会触发append传参相关的报错 - 首次赋值直接取
sname,完全满足优先选取姓氏输入项的要求,不需要走随机逻辑 - 每次随机选择前先剔除已经判断过不符合条件的当前值,避免循环反复抽到同一个无效值,符合你「重新选取另一个随机输入」的要求
- 增加了边界判断:如果所有输入项都不等于
'smores',会自动终止循环,不会出现无限死循环的问题
内容的提问来源于stack exchange,提问作者quagrain
相关产品推荐
相关产品推荐

