潜水的老鼠 发表于 7 天前

python最新版 023列表 课后作业------”输出幸运数“一题的疑惑

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)#找到一行的最小值
    new1.append(mini)#将每行的最小值添加到new1/储存最小值
for p in range(0,22):
    for q in range(0,22):
      lie.append(wai)#将每列生成为一个列表
    maxi=max(lie)#找到一列的最大值
    new2.append(maxi)#将每列的最大值添加到new2/储存最大值
    lie=[]#情况列表lie,准备储存下一列
for h in new1:
    if h in new2:
      print(h)




目前已知存在的问题是wai列表里混入了空列表,并没有按预期储存22个nei列表,原因在哪里??(可能也存在其他问题)(代码比较繁琐,欢迎指正)

FishC 发表于 7 天前

同学你的代码不完整,我猜测你是在做“随机生成列表并筛选幸运数”的题目。下面给出一个简单例子(假设幸运数是能被3整除的数字):


import random

nums = []# 空列表,用来存放随机数
for i in range(10):
    nums.append(random.randint(1, 100))

print("所有随机数:", nums)

lucky = []
for num in nums:
    if num % 3 == 0:
      lucky.append(num)

print("幸运数:", lucky)


如果题目要求“幸运数”是别的规则,比如数字包含7,只需修改判断条件:


if num % 3 == 0:      # 能被3整除
if num % 7 == 0:      # 能被7整除
if '7' in str(num):   # 数字中包含7


你的代码问题排查:


[*] nei=和wai=要赋初始值,否则语法错误。
[*] while s后面没有循环体,且s=0表示条件为假,循环不会执行;如果改成while True就得在循环里用break退出。
[*] import random应该放在文件开头。


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王星云 发表于 7 天前

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 就变成 , [], [], …]。
每生成一行之前,把 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)
    new1.append(mini)

new2=[]   # 存每列最大值
for p in range(0,22):
    lie=[]   # 初始化lie
    for q in range(0,22):
      lie.append(wai)
    maxi=max(lie)
    new2.append(maxi)

# 不能简单 h in new2;要校验坐标!
lucky_nums = []
for row_idx in range(22):
    row_min_val = new1
    # 找到这一行最小值在哪一列
    col_idx = wai.index(row_min_val)
    # 拿该位置,看它是不是本列的最大值
    if wai == new2:
      lucky_nums.append(wai)

print("幸运数字:", lucky_nums)

柿子饼同学 发表于 7 天前

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
        i = 0
看到最后一行, 你在内层循环结束后没有把 i 初始化为 0, 导致后面 i 一直是 22, 根本进不了内层循环了. 建议使用 for 循环更方便一些.

潜水的老鼠 发表于 6 天前

王星云 发表于 2026-8-14 22:46
i = 0 只在最开头初始化一次!
第一轮s=0:内层while i

你好 我修改了我的代码
import random
nei=[]
wai=[]
i=0
s=0
while s<22:
    i=0
    while i<22:      
      m=random.randint(0,483)#生成随机数
      repeat=False
      for row in wai:               
            if m in row:
                repeat=True
                break
      if m in nei:
         repeat=True #检验随机数是否重复,若重复则重新生成
      if repeat==False:
            nei.append(m)#将新数加入nei列表
            i+=1#计数器加一,进行下一轮循环,一共进行22次
    wai.append(nei)#将拥有22个元素的列表nei添加为列表wai的一个元素
    nei=[]#清空列表nei,准备生成下一个nei
    s+=1#计数器加一

#至此,理想状态下应生成好了22*22的矩阵,即列表wai,接下来要开始寻找幸运数
new1=[]
new2=[]
lie=[]
for t in range(0,22):
    mini=min(wai)#找到一行的最小值
    new1.append(mini)#将每行的最小值添加到new1/储存最小值
for p in range(0,22):
    for q in range(0,22):
      lie.append(wai)#将每列生成为一个列表
    maxi=max(lie)#找到一列的最大值
    new2.append(maxi)#将每列的最大值添加到new2/储存最大值
    lie=[]#情况列表lie,准备储存下一列


lucky=[]




for x in range(0,22):
    zxz=new1#依次取出最小值
    idx=wai.index(zxz)#查找该最小值所在的列
    if new2==zxz:
      lucky.append(zxz)
print(lucky)


但是返回结果依旧为空列表,应该不是纯粹的概率问题,难道代码还有问题?希望可以继续交流~~(我试了你的代码,也是返回空列表)

潜水的老鼠 发表于 6 天前

FishC 发表于 2026-8-14 16:36
同学你的代码不完整,我猜测你是在做“随机生成列表并筛选幸运数”的题目。下面给出一个简单例子(假设幸运 ...

import random
nei=[]
wai=[]
i=0
s=0
while s<22:
    i=0
    while i<22:      
      m=random.randint(0,483)#生成随机数
      repeat=False
      for row in wai:               
            if m in row:
                repeat=True
                break
      if m in nei:
         repeat=True #检验随机数是否重复,若重复则重新生成
      if repeat==False:
            nei.append(m)#将新数加入nei列表
            i+=1#计数器加一,进行下一轮循环,一共进行22次
    wai.append(nei)#将拥有22个元素的列表nei添加为列表wai的一个元素
    nei=[]#清空列表nei,准备生成下一个nei
    s+=1#计数器加一

#至此,理想状态下应生成好了22*22的矩阵,即列表wai,接下来要开始寻找幸运数
new1=[]
new2=[]
lie=[]
for t in range(0,22):
    mini=min(wai)#找到一行的最小值
    new1.append(mini)#将每行的最小值添加到new1/储存最小值
for p in range(0,22):
    for q in range(0,22):
      lie.append(wai)#将每列生成为一个列表
    maxi=max(lie)#找到一列的最大值
    new2.append(maxi)#将每列的最大值添加到new2/储存最大值
    lie=[]#情况列表lie,准备储存下一列


lucky=[]




for x in range(0,22):
    zxz=new1#依次取出最小值
    idx=wai.index(zxz)#查找该最小值所在的列
    if new2==zxz:
      lucky.append(zxz)
print(lucky)


你好,结果只能返回空列表,代码还是有问题吗??希望继续交流~~

FishC 发表于 6 天前

潜水的老鼠 发表于 2026-08-15 20:23
FishC 发表于 2026-8-14 16:36
同学你的代码不完整, ...

同学,你贴出的代码有几个问题,我们先逐个解决:


[*]nei= 和 wai= 后面没有赋值,这样会直接报语法错误。你可以先给它们赋一个初始值,比如 nei = 0、wai = 0。
[*]while s 这一行,因为前面写了 s=0,而 0 代表假,所以循环根本不会执行。
[*]import random 最好放在整个程序的最开头,不要写在中间。


如果你想实现的是“随机生成一堆数字,然后把其中符合幸运数规则的挑出来”,可以参考下面的完整写法:


import random

# 生成10个1~100的随机数
nums = []
for i in range(10):
    nums.append(random.randint(1, 100))

print("所有随机数:", nums)

# 筛选幸运数,这里假设能被3整除的就是幸运数
lucky = []
for num in nums:
    if num % 3 == 0:
      lucky.append(num)

print("幸运数:", lucky)


如果你们的题目里“幸运数”有别的规则,比如“数字中包含7”或者“能被7整除”,那你只需要修改 if 那一行即可,例如:


if num % 7 == 0:          # 能被7整除
if '7' in str(num):       # 数字中包含7


你现在的代码里还有 nei 和 wai,可能是有其他要求,比如“内层循环”和“外层循环”?如果是这样,请你把完整的题目内容贴出来,我再给你更准确的解释。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: python最新版 023列表 课后作业------”输出幸运数“一题的疑惑