|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
python最新版 023列表 课后作业------”输出幸运数“一题的疑惑
- nei=[]
- wai=[]
- i=0
- s=0
- import random
- while s<22:
- while i<22:
- m=random.randint(0,483)#生成随机数
- for row in wai:
- while m in row:
- m=random.randint(0,483)#检验随机数是否重复,若重复则重新生成
- nei.append(m)#将新数加入nei列表
- i+=1#计数器加一,进行下一轮循环,一共进行22次
- wai.append(nei)#将拥有22个元素的列表nei添加为列表wai的一个元素
- nei=[]#清空列表nei,准备生成下一个nei
- s+=1#计数器加一
- #至此,理想状态下应生成好了22*22的矩阵,即列表wai,接下来要开始寻找幸运数
- new1=[]
- new2=[]
- for t in range(0,22):
- mini=min(wai[t])#找到一行的最小值
- new1.append(mini)#将每行的最小值添加到new1/储存最小值
- for p in range(0,22):
- for q in range(0,22):
- lie.append(wai[q][p])#将每列生成为一个列表
- maxi=max(lie)#找到一列的最大值
- new2.append(maxi)#将每列的最大值添加到new2/储存最大值
- lie=[]#情况列表lie,准备储存下一列
- for h in new1:
- if h in new2:
- print(h)
复制代码
目前已知存在的问题是wai列表里混入了空列表,并没有按预期储存22个nei列表,原因在哪里??(可能也存在其他问题)(代码比较繁琐,欢迎指正)
题目在此
i = 0 只在最开头初始化一次!
第一轮s=0:内层while i<22循环跑完,i变成22,退出内层 while。把nei加入 wai,清空nei,s变成1。
第二轮s=1进来:i 依旧是 22,while i<22条件直接不成立,内层循环一次都不执行。
直接执行wai.append(nei),此时nei是空列表 → 往 wai 塞空列表!
后面每一轮 s 循环,i 永远 = 22,不断追加空列表,wai 就变成 [22元素列表, [], [], [], …]。
每生成一行之前,把 i 重置回 0。把i=0放到外层 while 循环内部。
import random
nei=[]
wai=[]
s=0
while s<22:
i = 0 # 关键:每新生成一行,i重置为0
while i<22:
m=random.randint(0,483)
# 检查:不能和已经生成好的行重复
repeat = False
for row in wai:
if m in row:
repeat = True
break
# 额外检查:当前正在构建的nei本行内也不能重复
if m in nei:
repeat = True
if not repeat:
nei.append(m)
i+=1
wai.append(nei)
nei=[]
s+=1
# 找幸运数字
new1=[] # 存每行最小值
for t in range(0,22):
mini=min(wai[t])
new1.append(mini)
new2=[] # 存每列最大值
for p in range(0,22):
lie=[] # 初始化lie
for q in range(0,22):
lie.append(wai[q][p])
maxi=max(lie)
new2.append(maxi)
# 不能简单 h in new2;要校验坐标!
lucky_nums = []
for row_idx in range(22):
row_min_val = new1[row_idx]
# 找到这一行最小值在哪一列
col_idx = wai[row_idx].index(row_min_val)
# 拿该位置,看它是不是本列的最大值
if wai[row_idx][col_idx] == new2[col_idx]:
lucky_nums.append(wai[row_idx][col_idx])
print("幸运数字:", lucky_nums)
|
|