鱼C论坛

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

[已解决]010课后练习

[复制链接]
发表于 2020-5-19 04:53:36 | 显示全部楼层 |阅读模式

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

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

x
各位好!关于010课后练习动动手最后一个:
答案中第一种方案用的while,
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
count = 0
length = len(member)
while count < length:
    print(member[count], member[count+1])
    count += 2
这边意思我理解了,但是我在想如果如下:

for i in range(len(member)):
        if i<= len(member) -1:
                print (member[i],member[i+1])
                i +=2
        if i >len(member) -1:
                break
结果是:
小甲鱼 88
88 黑夜
黑夜 90
90 迷途
迷途 85
85 怡静
怡静 90
90 秋舞斜阳
秋舞斜阳 88
为什么定义了i +=2并没有起到限定作用呢?
谢谢帮助先!
最佳答案
2020-5-19 10:12:38
Twilight6 发表于 2020-5-19 07:35
因为你这里的代码:

每次循环,for 这边会重新给 i 赋值 导致你for循环里面对 i 进行赋值被 for循环重新 ...


你的程序能解决问题,但是你的解释是不清楚的。
for循环会用 i 对可遍历对象逐个遍历,
他的程序中在for循环语句块内修改 i 不影响 i 对原可遍历对象的遍历,也就是每次循环 i 都会从列表中读取下一个元素,不管在for循环语句块中对 i 进行什么操作。
所以他的程序才会得到那个结果。
实例说话,开始for循环会得到i从0~9进行遍历
第一次循环 i=0,得到 '小甲鱼',在循环体内i进行了 i+=2,此时 i=2 ,但它不影响下一次循环i的赋值;
第二次循环 i=1,得到 '88',在循环体内i进行了 i+=2,此时 i=3 ,但它不影响下一次循环i的赋值;
……
需要修改的是循环开始时的遍历对象
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
for i in range(0,len(member),2):#range(0,10,2)遍历对象变成了:0 2 4 6 8
    print (member[i],member[i+1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 07:35:47 | 显示全部楼层
因为你这里的代码:
for i in range(len(member)): # 这里你是用 i 
每次循环,for 这边会重新给 i 赋值 导致你for循环里面对 i 进行赋值被 for循环重新赋值给覆盖了
但是你上面while 的代码,并不会再次给count 赋值,所以你可以这样的改下代码:


member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
count = 0 # 用count赋值和索引
for i in range(len(member)//2): # 这边要除以二,因为你每次count+2 都是间隔两个了,如果不除以而,会导致count后面超出列表长度导致索引报错哦
        if i<= len(member) -1:
                print (member[count],member[count+1])
                count +=2 
        if i >len(member) -1:
                break
如果对你有帮助,记得设置最佳哦~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 07:56:38 | 显示全部楼层
我的理解哈,不一定标准:
首先, i += 1 是把 i的值改变了,第一次循环最后 i = 2 结束循环,进入下一次循环的时候因为运行 for i in range()这句,所以 i 的值又被从新定义了,所以 i += 1 没有起到限制效果
其次,检测方法就是感觉那里出问题了就在那里print(i)打印出结果看一下是否和自己的想法一样,如果不一样就想一下原因,我就是这么干的,虽然很慢。
再次,for循环和while循环的区别就在于for循环,每一次 i 都会被从新赋值,while循环是赋值后会随循环而改变,因为while本身没有值可以供变量使用的值,只有判断。
for i in range(len(member)):
        if i<= len(member) -1:
                print (member[i],member[i+1])
                i +=2
                i = 100
                print(i)
运行这个代码,就可以发现,每一次“i”都会被从新赋值,而不是沿用上一次循环的值。

最后,对上述代码的更改我是这么做的,加个步长
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
for i in range(0,len(member),2):
    if i<= len(member) -1:
        print (member[i],member[i+1])
    if i >len(member) -1:
        break
写在最后的:我也是刚学python不久,刚学到18课,有什么说的不对的还望指正,一起加油!!!
最后的最后:有个方法,用for循环算一下1+2+3+...+100,从1加到100的结果是多少,就能明白for循环的意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 09:39:22 | 显示全部楼层
for循环是遍历循环,它是把一个可迭代对象中的每个元素拿出来执行循环体内的程序。所以每次进入for循环,for后面的对象都会被赋值为in后面可迭代对象的下一个对象。
所以在循环体内部改变for后面的对象的赋值是不可行的,它在下次循环中会被可迭代对象的下一个对象给覆盖掉。
而while循环是判断循环,只要条件为真就执行循环体内的程序。
所以可以在循环体给改变对象的赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 10:08:02 | 显示全部楼层
for i in range(len(member)): 这一句条改成  for i in range(0,len(member),2):
然后循环体里删除  i+=2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 10:12:38 | 显示全部楼层    本楼为最佳答案   
Twilight6 发表于 2020-5-19 07:35
因为你这里的代码:

每次循环,for 这边会重新给 i 赋值 导致你for循环里面对 i 进行赋值被 for循环重新 ...


你的程序能解决问题,但是你的解释是不清楚的。
for循环会用 i 对可遍历对象逐个遍历,
他的程序中在for循环语句块内修改 i 不影响 i 对原可遍历对象的遍历,也就是每次循环 i 都会从列表中读取下一个元素,不管在for循环语句块中对 i 进行什么操作。
所以他的程序才会得到那个结果。
实例说话,开始for循环会得到i从0~9进行遍历
第一次循环 i=0,得到 '小甲鱼',在循环体内i进行了 i+=2,此时 i=2 ,但它不影响下一次循环i的赋值;
第二次循环 i=1,得到 '88',在循环体内i进行了 i+=2,此时 i=3 ,但它不影响下一次循环i的赋值;
……
需要修改的是循环开始时的遍历对象
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
for i in range(0,len(member),2):#range(0,10,2)遍历对象变成了:0 2 4 6 8
    print (member[i],member[i+1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 16:06:52 | 显示全部楼层
sunrise085 发表于 2020-5-19 10:12
你的程序能解决问题,但是你的解释是不清楚的。
for循环会用 i 对可遍历对象逐个遍历,
他的程序中在 ...

非常感谢,很清晰~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 16:07:29 | 显示全部楼层
majian890324 发表于 2020-5-19 07:56
我的理解哈,不一定标准:
首先, i += 1 是把 i的值改变了,第一次循环最后 i = 2 结束循环,进入下一次 ...

谢谢~了解了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 16:18:07 | 显示全部楼层
Twilight6 发表于 2020-5-19 07:35
因为你这里的代码:

每次循环,for 这边会重新给 i 赋值 导致你for循环里面对 i 进行赋值被 for循环重新 ...

谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 05:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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