Python新手求助:实现无重复随机输出5条中式签文的程序
问题描述
我是一名Python初学者(仅学习了教材60页内容),想要编写一个程序:从签文列表中随机输出5条不重复的中式签文,每次输出一条后询问“是否想要下一条签文?”,用户回复“yes”则继续输出,直到5条全部输出完毕。目前的问题是不知道如何实现签文无重复输出,以下是我尝试编写的两段代码:
第一段尝试代码
import random fortunes_list = ['愿你吉星高照', '财源广进', '万事顺遂', '平安喜乐', '步步高升'] sampled_fortunes = random.sample(fortunes_list, 1) print(sampled_fortunes) input("是否想要下一条签文?") answer = "" while answer != "no": print(sampled_fortunes) input("是否想要下一条签文?")
第二段尝试代码
import random fortunes_list = ['愿你吉星高照', '财源广进', '万事顺遂', '平安喜乐', '步步高升'] print(random.choice(fortunes_list)) input("是否想要下一条签文?") answer = "" while answer != "no": print(random.choice(fortunes_list)) input("是否想要下一条签文?")
问题分析
- 第一段代码问题:仅用
random.sample获取1条签文后,循环里始终输出这条重复内容,没有获取新的签文。 - 第二段代码问题:每次调用
random.choice会从原列表随机选取,无法避免重复,不能保证输出的5条签文无重复。
解决方案
核心思路:先一次性从列表中选出5条不重复的签文,再逐个输出,每次询问用户是否继续,直到全部输出完成。
import random # 中式签文列表 fortunes_list = ['愿你吉星高照', '财源广进', '万事顺遂', '平安喜乐', '步步高升', '学业有成', '阖家幸福', '健康长寿'] # 随机抽取5条不重复的签文 selected_fortunes = random.sample(fortunes_list, 5) # 遍历输出选中的签文 for index, fortune in enumerate(selected_fortunes): print(fortune) # 不是最后一条签文时,才询问用户 if index != len(selected_fortunes) - 1: while True: answer = input("是否想要下一条签文?(yes/no) ") if answer.lower() == "yes": break elif answer.lower() == "no": print("本次求签结束。") exit() else: print("请输入有效的指令:yes或no!") print("5条签文已全部输出完毕,本次求签结束。")
代码说明
- 用
random.sample(fortunes_list, 5)直接从原列表抽取5条不重复的签文,一步解决无重复问题。 - 通过
for循环遍历选中的签文,逐个输出。 - 每次输出后(除最后一条),循环等待用户输入:输入
yes则继续下一条,输入no直接结束程序,输入其他内容提示重新输入,避免无效操作。 - 全部输出完成后给出明确的结束提示。
内容的提问来源于stack exchange,提问作者CRZY Moto
相关产品推荐
相关产品推荐

