鱼C论坛

 找回密码
 立即注册
查看: 2408|回复: 8

[已解决]关于range的疑问

[复制链接]
发表于 2016-7-28 14:57:58 | 显示全部楼层 |阅读模式

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

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

x
movies = ['a','s',['d','f',['g','h']]]
def D(the_list,level):
    for A in the_list:
        if isinstance (A,list):
            D(A,level+1)
        else:
            for tab_stop in range(level):   #7
                print ("\t",end = '')             #8
            print (A)
D(movies,0)
我很不理解第7行跟第8行,我觉得这两行没一点关联,就像:
for a in range(b):
      print(c)
一样没联系。

但我知道我是错得,求大家指点。请告诉我这两行的逻辑。谢谢!
最佳答案
2016-7-28 15:21:24
我理解你的意思,但是不能说没关系
看代码的话,这个程序完成的是字母前面的空格数跟嵌套的列表相关,嵌套的越深,前面的空格就越多。实现的应该是个层级显示的功能。

  1. for tab_stop in range(level):   #7
  2.                 print ("\t",end = '')             #8
复制代码

这两行代码完成的就是前面显示多少个空格的功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-28 15:21:24 | 显示全部楼层    本楼为最佳答案   
我理解你的意思,但是不能说没关系
看代码的话,这个程序完成的是字母前面的空格数跟嵌套的列表相关,嵌套的越深,前面的空格就越多。实现的应该是个层级显示的功能。

  1. for tab_stop in range(level):   #7
  2.                 print ("\t",end = '')             #8
复制代码

这两行代码完成的就是前面显示多少个空格的功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:21:31 | 显示全部楼层
相当于打印level个制表符,可以简化成:
print('\t' * level, end = '')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:22:27 | 显示全部楼层
下次发代码用代码格式发,在编辑栏有个<>按钮,把代码粘进去就行,格式更规范,第几行也一目了然
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 23:31:13 | 显示全部楼层
冬雪雪冬 发表于 2016-7-28 15:21
相当于打印level个制表符,可以简化成:
print('\t' * level, end = '')

range(3) = (0,1,2)
那代码就能简化成:
  1. for a in (0,1,2):
  2.       print('冬雪',end = '')
复制代码

结果是'冬雪'打印了3遍。
我们是不是可以推导出7,8行的联系就是:for循环完成了多少遍,下面就打印多少遍?
为了验证这个问题,我们把代码稍微改一下:
  1. for a in (5,3,9):
  2.       print('冬雪',end = '')
复制代码

结果也是‘冬雪’打印了3遍。
似乎可以确定7,8行的联系在这。
但问题是range(0)=(0,0),这里面也有2个元素,可代码:
  1. for a in range(0):
  2.       print ('冬雪',end = '')
复制代码

跑下来的结果是 啥也没有。。。 我不禁又失落了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 23:33:46 | 显示全部楼层
shuofxz 发表于 2016-7-28 15:21
我理解你的意思,但是不能说没关系
看代码的话,这个程序完成的是字母前面的空格数跟嵌套的列表相关,嵌套 ...

range(3) = (0,1,2)
那代码就能简化成:
  1. for a in (0,1,2):
  2.       print('冬雪',end = '')
复制代码

结果是'冬雪'打印了3遍。
我们是不是可以推导出7,8行的联系就是:for循环完成了多少遍,下面就打印多少遍?
为了验证这个问题,我们把代码稍微改一下:
  1. for a in (5,3,9):
  2.       print('冬雪',end = '')
复制代码

结果也是‘冬雪’打印了3遍。
似乎可以确定7,8行的联系在这。
但问题是range(0)=(0,0),这里面也有2个元素,可代码:
  1. for a in range(0):
  2.       print ('冬雪',end = '')
复制代码

跑下来的结果是 啥也没有。。。 我不禁又失落了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-28 23:37:33 | 显示全部楼层
挥舞我的棒球棍 发表于 2016-7-28 23:31
range(3) = (0,1,2)
那代码就能简化成:

range(0)只有0个元素,所以for循环什么也不打印。
range(0)不是等于(0, 0),而是等于range(0, 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 23:49:54 | 显示全部楼层
冬雪雪冬 发表于 2016-7-28 23:37
range(0)只有0个元素,所以for循环什么也不打印。
range(0)不是等于(0, 0),而是等于range(0, 0)

恍然大悟!谢谢!
其实for a in range(b),其实就是个“循环计次作用”。可以安心睡觉了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-29 08:59:59 | 显示全部楼层
挥舞我的棒球棍 发表于 2016-7-28 23:49
恍然大悟!谢谢!
其实for a in range(b),其实就是个“循环计次作用”。可以安心睡觉了。


是这个意思的
你也可以看一下官方的帮助文档:
class range(stop)
class range(start, stop[, step])
The arguments to the range constructor must be integers (either built-in int or any object that implements the __index__ special method). If the step argument is omitted, it defaults to 1. If the start argument is omitted, it defaults to 0. If step is zero, ValueError is raised.

For a positive step, the contents of a range r are determined by the formula r = start + step*i where i >= 0 and r < stop.

For a negative step, the contents of the range are still determined by the formula r = start + step*i, but the constraints are i >= 0 and r > stop.

A range object will be empty if r[0] does not meet the value constraint. Ranges do support negative indices, but these are interpreted as indexing from the end of the sequence determined by the positive indices.

Ranges containing absolute values larger than sys.maxsize are permitted but some features (such as len()) may raise OverflowError.


range(0,0) 其实是不存在的,起始值为0,终止值也为0,就是什么都没有呀
比如下面的例子
搜狗截图20160729085923.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 19:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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