Python实现宾果游戏:如何根据用户输入将卡上对应数字替换为X
宾果卡数字匹配替换功能实现
实现逻辑
- 对用户输入做类型校验,排除非数字、超出1-75范围的无效输入
- 遍历宾果卡的5个列(B/I/N/G/O),匹配输入的数字
- 匹配成功后直接修改对应下标位置的值为
X,刷新打印宾果卡 - 支持持续输入,直到用户输入q退出程序
注:原
generate_card函数中range参数为左闭右开,原本逻辑会漏掉每列最后一个数字(比如B列应该是1-15,原代码只会取1-14),已同步修复。
完整可运行代码
import random random_draw_list = random.sample(range(1, 76), 75) def generate_card(): card = { "B": [], "I": [], "N": [], "G": [], "O": [], } min_num = 1 max_num = 15 for letter in card: # 修复原代码range右开逻辑问题,增加+1覆盖每列最后一个数字 card[letter] = random.sample(range(min_num, max_num + 1), 5) min_num += 15 max_num += 15 if letter == "N": card[letter][2] = "X" # 免费格子 return card def print_card(card): for letter in card: print(letter, end="\t") for number in card[letter]: print(number, end="\t") print("\n") print("\n") def mark_number(card, draw_num): # 遍历每列查找匹配的数字 for letter in card: if draw_num in card[letter]: # 找到对应下标替换为X idx = card[letter].index(draw_num) card[letter][idx] = "X" return True return False def main(): print("Let's play bingo!") card = generate_card() print("\nHere is your card:\n") print_card(card) # 增加循环输入逻辑 while True: user_input = input("请输入叫出的数字(输入q退出游戏):").strip() if user_input.lower() == 'q': print("游戏结束") break # 校验输入合法性 try: draw_num = int(user_input) except ValueError: print("输入无效,请输入1-75之间的数字") continue if draw_num < 1 or draw_num >75: print("数字超出范围,请输入1-75之间的数字") continue # 标记数字 is_matched = mark_number(card, draw_num) if is_matched: print(f"数字{draw_num}匹配成功!") print_card(card) else: print(f"当前卡上没有数字{draw_num}") if __name__ == "__main__": main()
核心逻辑说明
- 新增
mark_number函数专门处理数字匹配替换逻辑:遍历宾果卡的所有列,用in判断数字是否存在于当前列,存在则调用index方法获取下标,直接替换为X - 输入部分增加异常捕获逻辑,避免非数字输入导致程序崩溃,同时限制输入范围为1-75符合宾果游戏规则
- 匹配成功后自动刷新打印最新的宾果卡,未匹配则给出提示
内容的提问来源于stack exchange,提问作者Ben Fitzgerald
相关产品推荐
相关产品推荐

