鱼C论坛

 找回密码
 立即注册
查看: 1045|回复: 9

[已解决]实在理解不了,求解答

[复制链接]
发表于 2018-5-11 08:43:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def interval(start,stop=None,step=1):
    'Imitates range() for step>0'
    if stop is None:
        start,stop=0,start
    result = []
    i = start
    while i < stop:
        result.append(i)
        i +=step
    return result

print(interval(10))
这段代码为何输出为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

调用interval是start为10;那么stop=none;则参数被赋值为10,0,10;
这样的话i=10,这下面的while的条件永远不能满足啊?怎么还能输出一段数列呢?
最佳答案
2018-5-11 21:25:11
问题出在  start,stop=0,start  ==> 等价于
a = start
start = 0
stop = a
所以执行了这一句以后,
start = 0
stop = 10

  while i < stop:
        result.append(i)
        i +=step
    return result
就是:
  while i < 10:
        result.append(i)
        i +=1
    return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-11 08:49:41 | 显示全部楼层
None不能定义为0,
start,stop=0,start让start变成0,stop变成10
i又从0开始一个一个加,肯定进入循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-11 08:55:13 | 显示全部楼层
因为这里:   
if stop is None:
        start,stop=0,start
默认参数stop是None,你调用函数的时候不给stop传值意味着if条件成立,所以设置了start为0,stop为10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2018-5-11 09:00:57 | 显示全部楼层
你说错了,i 等于 0, 就相当于这样
  1. while i < 10:
  2.          result.append(i)
  3.          i +=1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 09:01:15 | 显示全部楼层
你说错了,i 等于 0, 就相当于这样
  1. while i < 10:
  2.          result.append(i)
  3.          i +=1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 10:29:12 | 显示全部楼层
这段代码等价于:

while i < 10:
    result.append(i)
    i += 1

所以会输出[1..9]的列表

===================

你这段代码写的有点丑。

PS.要写注释的话,请用三引号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 11:23:00 | 显示全部楼层
hi  请参考

  1. def interval(start, stop=None,step=1):     # 1.  interval(10) 意味着:start=10,stop=None,step=1
  2.    
  3.     if stop is None:         # 2. stop 为 None,走if分支,因此 start = 0,stop = 10,step = 1
  4.         start,stop=0,start
  5.     result = []      
  6.     i = start        #3 . i = 0
  7.     while i < stop:   # 4. i < 10时,while循环有效
  8.         result.append(i)  # 5. while循环期间,依次添加 0,1,2...,9到列表result中
  9.         i +=step
  10.     return result  #6. 返回列表

  11. print(interval(10)) #7. 打印 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 14:18:04 | 显示全部楼层
本帖最后由 天天学习$ 于 2018-5-11 14:43 编辑

只是10的时候while 不会执行 但是return还是会被执行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 21:25:11 | 显示全部楼层    本楼为最佳答案   
问题出在  start,stop=0,start  ==> 等价于
a = start
start = 0
stop = a
所以执行了这一句以后,
start = 0
stop = 10

  while i < stop:
        result.append(i)
        i +=step
    return result
就是:
  while i < 10:
        result.append(i)
        i +=1
    return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-11 23:20:52 | 显示全部楼层
ABC23 发表于 2018-5-11 10:29
这段代码等价于:

while i < 10:

我其实就是没有明白start,stop=0,start这句的含义;注释三引号我会注意的!学习了,学习了!谢谢解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 21:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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