Lucky.Jobling 发表于 2020-4-27 13:42:45

009了不起的分支3的疑惑

for i in range(0, 10, 2):
    print('I Love FishC')

为什么这里第一次出现的变量i不用在前面定义,也不会报错呢

liuzhengyuan 发表于 2020-4-27 13:43:57

因为这是局部变量

qiuyouzhi 发表于 2020-4-27 13:47:58

如果你说i的话,这就是for循环的语法呀,
定义一个变量,遍历in后面的东西

heidern0612 发表于 2020-4-27 13:48:28

因为i在for循环的时候,就已经定义好了,这是规定。

就像你问,为什么打印要用Print指令,而不是中文的“打印”似的。

这都是规定..

永恒的蓝色梦想 发表于 2020-4-27 13:53:52

liuzhengyuan 发表于 2020-4-27 13:43
因为这是局部变量

在Python中不是

永恒的蓝色梦想 发表于 2020-4-27 13:54:27

因为这里就是变量i的定义

老八秘制 发表于 2020-4-27 13:56:27

在for循环里面这就是在定义i这个变量……

Lucky.Jobling 发表于 2020-4-27 14:28:31

heidern0612 发表于 2020-4-27 13:48
因为i在for循环的时候,就已经定义好了,这是规定。

就像你问,为什么打印要用Print指令,而不是中文的 ...

那可以用x或y其他变量替代i么

heidern0612 发表于 2020-4-27 14:29:37

Lucky.Jobling 发表于 2020-4-27 14:28
那可以用x或y其他变量替代i么

可以,随便。

因为这个i用的并不多,所以就随便定义个变量即可。

也不用写太繁琐,因为下面可能会调用标号之类的。

Lucky.Jobling 发表于 2020-4-27 14:43:46

heidern0612 发表于 2020-4-27 14:29
可以,随便。

因为这个i用的并不多,所以就随便定义个变量即可。


谢谢大神,还有个问题哈
for i in range(10):
    if i%2!=0:
      print(i)
      continue
    i+=2
    print(i)
这个后面的i+=2是不是和for条件里的i没有关系?就像你说的for条件里变量也可以设定x或y,就算后面i的变化和for里面的不一样,也不影响for后面的i顺次在0和10之间取下去?后面的也可以写成别的变量?
for x in range(10):
    if i%2!=0:
      print(x)
      continue
    y+=2
    print(i)
这样也是可以的?但是这样y是不是会又没定义了啊

heidern0612 发表于 2020-4-27 14:52:11

Lucky.Jobling 发表于 2020-4-27 14:43
谢谢大神,还有个问题哈
for i in range(10):
    if i%2!=0:


不,这里的i+=2,就是for循环里定义的那个i。i在for循环的时候就已经定义好了,依次取值在0到10之间。

你前面定义了i,所以下面才能用i+=2。你前面没定义y,下面就用不了y+=2.逻辑就是这么简单。

Lucky.Jobling 发表于 2020-4-27 14:52:51

heidern0612 发表于 2020-4-27 14:29
可以,随便。

因为这个i用的并不多,所以就随便定义个变量即可。


for i in range(10):
    if i%2!=0:
      print(i)
      continue
    i+=2
    print(i)
这个程序结果没看懂{:5_100:}
i=0时,if是不成立的,就会继续执行,输出0+2
i=1时,if成立,输出1,回到条件循环
i=2了,if不成立,继续执行,输出2+2
这以后执行,for后面的i是从3还是4执行啊,从结果看,是从3执行,if成立,输出3
这里的i+=2不会影响for后面的i取值么

heidern0612 发表于 2020-4-27 14:54:23

Lucky.Jobling 发表于 2020-4-27 14:43
谢谢大神,还有个问题哈
for i in range(10):
    if i%2!=0:


如果你不喜欢用i这个变量,可以换成y。那么for循环里也要换成Y。或者Y提前定义好也是可以的。

y = 0
for x in range(10):
    if i%2!=0:
      print(x)
      continue
    y+=2
    print(y)

heidern0612 发表于 2020-4-27 14:59:52

本帖最后由 heidern0612 于 2020-4-27 15:07 编辑

Lucky.Jobling 发表于 2020-4-27 14:52
for i in range(10):
    if i%2!=0:
      print(i)


i +=2循环的只是当次i的结果,不影响上面的for循环。

或者你可以这么理解,当i等于0的时候,给i重新赋值为2,当i等于1的时候,重新给i复制为1.

for循环赋值,然后运行程序i重新赋值;for循环i又重新赋值,然后程序运算,i重新赋值…循环



实际上这个牵扯到内存机制的问题,当你for循环写好的时候,__next__一遍遍的就已经执行好了你需要迭代的次数。

你下面无论怎么运算,这个迭代次数已经在你for循环定义好了,存在内存机制中。

在你从0到10的这10次运算中,i已经从0到10定义完毕,下面执行的只是你运算的结果而已。

Lucky.Jobling 发表于 2020-4-27 15:06:35

heidern0612 发表于 2020-4-27 14:54
如果你不喜欢用i这个变量,可以换成y。那么for循环里也要换成Y。或者Y提前定义好也是可以的。

嗯嗯,觉得写成两个变量清楚多了。但是一个程序中,同样的变量符号可以有不同的变量计算方式么,什么情况下可以这样用,就是他出现的时候怎么知道到底该用哪种计算方式啊,这样用一个字母表示不同的变量有什么好处么,我感觉反而没那么清楚o(╯□╰)o

heidern0612 发表于 2020-4-27 15:14:11

本帖最后由 heidern0612 于 2020-4-27 15:17 编辑

Lucky.Jobling 发表于 2020-4-27 15:06
嗯嗯,觉得写成两个变量清楚多了。但是一个程序中,同样的变量符号可以有不同的变量计算方式么,什么情况 ...

为什么同一个变量的变化,要用俩变量表示呢?

简单说个生活中的问题:

假设你需要做10次搬运工作。

每当你遇到偶数搬运工作时,可能因为工作量大,你就需要和你的伙伴一起做(假设你跟你的伙伴是同一个人,可以叠加。或者说你的影分身)。

难道这个时候我还重新再找个人别人,让我的伙伴(或者你的影分身)和别人一起做吗?


这种自增的变量在解python数学题的时候应用很多,如果你实在理解不了,可以先放下,往后学。

Lucky.Jobling 发表于 2020-4-27 15:17:20

heidern0612 发表于 2020-4-27 14:59
i +=2循环的只是当次i的结果,不影响上面的for循环。

或者你可以这么理解,当i等于0的时候,给i重新 ...

或者你可以这么理解,当i等于0的时候,给i重新赋值为2,当i等于1的时候,重新给i复制为1.

这句不明白{:5_100:}{:5_100:}{:5_100:}
是不是
i=0的时候,执行第一次for和后面的程序,这个时候i=2了啊,返回for条件继续执行,i又从1开始
该怎么理解啊……
是不是就机械得记成,for后面的条件有规定取值方式,就不受后面程序的影响对变量赋值{:5_94:}

heidern0612 发表于 2020-4-27 15:20:32

Lucky.Jobling 发表于 2020-4-27 15:17
或者你可以这么理解,当i等于0的时候,给i重新赋值为2,当i等于1的时候,重新给i复制为1.

这句不明白{ ...

你就简单理解为:

for循环定义的时候,就已经定义好了循环次数。

后面程序运算的结果,不会影响循环的次数即可。

永恒的蓝色梦想 发表于 2020-4-27 15:20:46

Lucky.Jobling 发表于 2020-4-27 15:17
或者你可以这么理解,当i等于0的时候,给i重新赋值为2,当i等于1的时候,重新给i复制为1.

这句不明白{ ...

哇……兄弟,你可是已经把别人选为最佳了耶……

Lucky.Jobling 发表于 2020-4-27 15:22:46

heidern0612 发表于 2020-4-27 15:20
你就简单理解为:

for循环定义的时候,就已经定义好了循环次数。


太谢谢大神了!!!!!{:5_109:}
页: [1] 2
查看完整版本: 009了不起的分支3的疑惑