为什么str(random.choices())返回带括号字符串导致条件判断不生效
问题原因
random.choices() 函数返回值为列表类型,默认返回长度为1的列表(例如['rock'])。你直接将列表强制转为字符串后,得到的结果是带方括号和引号的字符串(例如"['rock']"),和你判断条件中'rock'这类纯字符串完全不匹配,因此条件判断永远无法触发。
另外你的代码漏了import random导入语句,运行时也会触发报错。
解决方法
两种可行方案任选其一即可:
- 方案1(更推荐):改用
random.choice()函数,该函数直接返回单个随机元素,无需额外处理:
import random def detect(player_pick): enemy_pick = random.choice(['rock', 'paper', 'scissors']) # Rock detection if enemy_pick == 'rock' and player_pick == 'scissors': print("you lose") return "rock_win_enemy" elif enemy_pick == 'scissors' and player_pick == 'rock': print("Enemy lose") return "rock_win_player" elif enemy_pick == 'rock' and player_pick == 'rock': print("tie") return "tie" # 后续Paper、Scissors的判断逻辑按相同规则补充即可
- 方案2:如果要保留
random.choices()的写法,取返回列表的第一个元素使用即可:
# 取下标为0的元素即为你需要的字符串类型出拳结果 enemy_pick = random.choices(['rock', 'paper', 'scissors'])[0]
内容的提问来源于stack exchange,提问作者AdonsFco
相关产品推荐
相关产品推荐

