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列表,原因在哪里??(可能也存在其他问题)(代码比较繁琐,欢迎指正) 同学你的代码不完整,我猜测你是在做“随机生成列表并筛选幸运数”的题目。下面给出一个简单例子(假设幸运数是能被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 小助理,如未能正确解答您的问题,请继续追问。 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) 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 循环更方便一些. 王星云 发表于 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)
但是返回结果依旧为空列表,应该不是纯粹的概率问题,难道代码还有问题?希望可以继续交流~~(我试了你的代码,也是返回空列表) 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)
你好,结果只能返回空列表,代码还是有问题吗??希望继续交流~~ 潜水的老鼠 发表于 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]