QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
72
查看: 182|回复: 9

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

[复制链接]
最佳答案
0 
累计签到:86 天
连续签到:4 天
皮林重甲 发表于 2018-5-11 08:43:11 1829 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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的条件永远不能满足啊?怎么还能输出一段数列呢?来自群组: python
最佳答案
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
楼层
跳转到指定楼层
最佳答案
222 
累计签到:99 天
连续签到:31 天
塔利班 发表于 2018-5-11 08:49:41 | 显示全部楼层
None不能定义为0,
start,stop=0,start让start变成0,stop变成10
i又从0开始一个一个加,肯定进入循环
最佳答案
1034 
累计签到:340 天
连续签到:93 天
BngThea 发表于 2018-5-11 08:55:13 | 显示全部楼层
因为这里:   
if stop is None:
        start,stop=0,start
默认参数stop是None,你调用函数的时候不给stop传值意味着if条件成立,所以设置了start为0,stop为10
最佳答案
50 
累计签到:580 天
连续签到:2 天
alltolove 发表于 2018-5-11 09:00:57 | 显示全部楼层
你说错了,i 等于 0, 就相当于这样
  1. while i < 10:
  2.          result.append(i)
  3.          i +=1
复制代码
最佳答案
50 
累计签到:580 天
连续签到:2 天
alltolove 发表于 2018-5-11 09:01:15 | 显示全部楼层
你说错了,i 等于 0, 就相当于这样
  1. while i < 10:
  2.          result.append(i)
  3.          i +=1
复制代码
最佳答案
38 
累计签到:17 天
连续签到:2 天
ABC23 发表于 2018-5-11 10:29:12 | 显示全部楼层
这段代码等价于:

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

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

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

你这段代码写的有点丑。

PS.要写注释的话,请用三引号
最佳答案
124 
累计签到:333 天
连续签到:19 天
thexiosi 发表于 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]
复制代码
最佳答案
0 
累计签到:2 天
连续签到:1 天
天天学习$ 发表于 2018-5-11 14:18:04 | 显示全部楼层
本帖最后由 天天学习$ 于 2018-5-11 14:43 编辑

只是10的时候while 不会执行 但是return还是会被执行的
最佳答案
6 
累计签到:90 天
连续签到:45 天
DevenVan 发表于 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
最佳答案
0 
累计签到:86 天
连续签到:4 天
皮林重甲  楼主| 发表于 2018-5-11 23:20:52 | 显示全部楼层
ABC23 发表于 2018-5-11 10:29
这段代码等价于:

while i < 10:

我其实就是没有明白start,stop=0,start这句的含义;注释三引号我会注意的!学习了,学习了!谢谢解答!

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-5-25 22:51

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