找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 211|回复: 5

[求助] 初学者求助!

2

主题

7

帖子

7

积分

贫民

积分
7
zhiweiovs 发表于 2017-8-12 22:36:34 | 显示全部楼层 |阅读模式
代码如下:
a=[]
def guess():
    for i in range (1,2000):
        for j in range(1,2000):
            if (i+100)==j*j:
                a.append(i)
                return (i)
     
guess()
print (a)


输出是[21]

而如果把return改为print,就会输出完整的列表:
21
44
69
96
125
156
189
224
261
300
341
384
429
476
525
576
629
684
741
800
861
924
989
1056
1125
1196
1269
1344
1421
1500
1581
1664
1749
1836
1925
[21, 44, 69, 96, 125, 156, 189, 224, 261, 300, 341, 384, 429, 476, 525, 576, 629, 684, 741, 800, 861, 924, 989, 1056, 1125, 1196, 1269, 1344, 1421, 1500, 1581, 1664, 1749, 1836, 1925]


请问为什么会出现两种不同的列表?

回复

使用道具 举报

2

主题

4

帖子

4

积分

贫民

积分
4
lethe 发表于 2017-8-13 19:37:00 | 显示全部楼层
因为return有返回值就跳出函数了 所以结果就是一个
PS:你把return去掉 就会返回a列表了 [21, 44, 69, 96, 125, 156, 189, 224, 261, 300, 341, 384, 429, 476, 525, 576, 629, 684, 741, 800, 861, 924, 989, 1056, 1125, 1196, 1269, 1344, 1421, 1500, 1581, 1664, 1749, 1836, 1925]
回复 支持 反对

使用道具 举报

2

主题

7

帖子

7

积分

贫民

积分
7
zhiweiovs  楼主| 发表于 2017-8-13 21:41:28 | 显示全部楼层
也就是说return相当于只要有结果就break了,而print会一直把所有的结果都算完才break,对么?
回复 支持 反对

使用道具 举报

2

主题

7

帖子

7

积分

贫民

积分
7
zhiweiovs  楼主| 发表于 2017-8-13 21:42:26 | 显示全部楼层
lethe 发表于 2017-8-13 19:37
因为return有返回值就跳出函数了 所以结果就是一个
PS:你把return去掉 就会返回a列表了 [21, 44, 69, 96, 1 ...

也就是说return相当于只要有结果就break了,而print会一直把所有的结果都算完才break,对么?
回复 支持 反对

使用道具 举报

2

主题

4

帖子

4

积分

贫民

积分
4
lethe 发表于 2017-8-13 23:01:01 | 显示全部楼层
zhiweiovs 发表于 2017-8-13 21:42
也就是说return相当于只要有结果就break了,而print会一直把所有的结果都算完才break,对么? ...

“也就是说return相当于只要有结果就break了”也不能这么说吧 以循环为例 return是得到一个结果就返回了 break是满足你设定的break条件时,就终止循环语句了
后半句不对,和print没关系 把所有结果都运算完的是for语句 print只是“打印”,就是让你看到程序运行的结果
如果没有最后的print(a),guess()依然是原来的结果 只是你看不到而已
回复 支持 反对

使用道具 举报

1

主题

14

帖子

14

积分

贫民

积分
14
lywane 发表于 2017-8-14 09:56:26 | 显示全部楼层
return 是将执行权返回给函数调用方,即碰到return语句,这个函数就结束了,当然只会有第一个结果
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表