如何在Python中实现6×6唯一随机数矩阵并支持用户选数?
嘿,作为Python新手遇到这种问题很正常,我来帮你一步步解决!你现在有两个核心需求:生成6×6的唯一随机数矩阵,以及让用户能从显示的网格里选择数字。咱们一个个来搞定~
一、生成6×6的唯一随机数矩阵
你原来的代码用random.randint(1,100)生成每个元素,这种方式会重复,因为每次随机都是独立的,没有去重机制。咱们可以换个思路:先从1-100里挑出36个不重复的数,再把它们分成6行6列的矩阵。
用random.sample()就能轻松做到,它会从指定序列里选出指定数量的唯一元素:
import random # 从1到100中随机挑选36个不重复的数 unique_numbers = random.sample(range(1, 101), 36) # 将列表分割成6行,每行6个元素,形成6×6矩阵 random_matrix = [unique_numbers[i*6 : (i+1)*6] for i in range(6)]
这样生成的矩阵里绝对不会有重复值啦!
二、实现用户从网格中选择数字的功能
接下来要让用户能从显示的网格里选数字,这里咱们做一个友好的交互:让用户输入行号和列号(提示用户用1-6的范围),然后取出对应位置的数字,同时处理用户可能的错误输入(比如输入非数字、超出范围的数)。
完整的代码整合起来是这样的:
import random # 生成6×6的唯一随机数矩阵 unique_numbers = random.sample(range(1, 101), 36) random_matrix = [unique_numbers[i*6 : (i+1)*6] for i in range(6)] # 打印网格 print("生成的6×6随机数矩阵:") for row in random_matrix: # 用制表符分隔元素,让排版更整齐 print("\t".join(map(str, row))) # 让用户选择网格中的位置 print("\n请从上面的网格中选择一个数字,输入它的行号和列号(范围1-6):") while True: try: # 获取用户输入的行和列,分割成两个整数 row_input, col_input = map(int, input("输入格式:行号 列号(用空格分隔):").split()) # 转换为Python的0-based索引(因为列表从0开始计数) row_idx = row_input - 1 col_idx = col_input - 1 # 检查输入的行和列是否在有效范围内 if 0 <= row_idx < 6 and 0 <= col_idx < 6: selected_number = random_matrix[row_idx][col_idx] print(f"你选择的数字是:{selected_number}") break else: print("⚠️ 行号和列号必须在1到6之间,请重新输入!") except ValueError: print("⚠️ 请输入两个有效的整数,用空格分隔,比如:3 4")
额外说明
- 关于去重:
random.sample()是最简洁的方式,它内部已经处理了去重逻辑,比你自己循环生成再判断重复高效得多。 - 交互部分的
while True循环是为了让用户输入错误时能重新输入,直到输入正确为止,提升用户体验。 - 打印矩阵时用
"\t".join(map(str, row))比嵌套循环打印更简洁,排版也更整齐。
内容的提问来源于stack exchange,提问作者Zarwa Butt
相关产品推荐
相关产品推荐

