You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:27:02