Python宾果游戏代码仅生成1个面板,如何按玩家数生成对应数量面板?
问题根源
- 外层循环变量和存储玩家总数的变量重名,导致玩家总数被覆盖:你最初将输入的玩家数量存入变量
s,但外层循环直接用s作为迭代变量,第一次循环后s就会被赋值为1,原有的玩家总数丢失,循环只会执行1次。 - 面板尺寸相关变量
b、bb和内层循环变量重名,第一次生成面板后这两个变量的值会被迭代修改,第二次及之后的循环无法进入内层生成面板的逻辑。 - 冗余&逻辑问题:
import random语句放在内层循环中会重复执行,应移到代码开头;else分支的链式调用逻辑存在问题,可能导致打印/写入格式异常。
修复后代码
import random # 补全文件写入对象初始化逻辑 t = open("宾果面板结果.txt", "w", encoding="utf-8") player_count = int(input("请输入玩家数量: ")) board_size = int(input("请输入面板尺寸: ")) table_size = int(input("请输入乘法表大小: ")) # 外层循环生成对应数量的面板,使用独立迭代变量避免覆盖原始数值 for player_idx in range(1, player_count + 1): used_nums = ['0'] t.write(f"{player_idx}. 面板 \n\n") print(f"{player_idx}. 面板 \n") # 每次生成面板都读取原始尺寸参数,避免变量被修改 for row in range(1, board_size + 1): for col in range(1, board_size + 1): number = random.randint(1, table_size) * random.randint(1, table_size) # 生成不重复的面板数字 while number in used_nums: number = random.randint(1, table_size) * random.randint(1, table_size) t.write(str(number)) print(str(number), end=' ') # 补空格对齐格式 if number <= 9: t.write(" ") print(" ", end='') elif number >= 100: t.write(" ") print(" ", end='') else: t.write(" ") print(" ", end='') used_nums.append(number) t.write("\n\n") print(" ") print(" ") t.close()
内容的提问来源于stack exchange,提问作者sopz
相关产品推荐
相关产品推荐

