全桥整流 发表于 2021-8-9 08:00:14

赋值左等于右,那我用左和用右按道理一样的吧,为什么运行结果不一样

shu=int(input('write a shuzi:'))
i = shu
while shu:
    i= shu-1
    while i :
      print('%',end='')
      i = i - 1
    print()
    shu= shu- 1

shu=int(input('write a shuzi:'))
i = shu
while i:
    i= shu - 1
    while i :
      print('%',end='')
      i = i - 1
    print()
    shu= shu - 1



我搞得好混乱,这两个有什么区别,为什么运行结果不一样?

青出于蓝 发表于 2021-8-9 08:13:40

这两个原本值是一样的,但是,后期改变的就不一样了,每循环一次i就等于shu减1

逃兵 发表于 2021-8-9 08:18:10

while条件不一样
一个是shu 一个是 i
你可以分别打印shu和i的周期变化

全桥整流 发表于 2021-8-9 09:41:53

青出于蓝 发表于 2021-8-9 08:13
这两个原本值是一样的,但是,后期改变的就不一样了,每循环一次i就等于shu减1

不太懂,两个的while循环的次数不是一样的吗

全桥整流 发表于 2021-8-9 09:42:34

while i =while shu 这样理解有没有错

青出于蓝 发表于 2021-8-9 09:55:34

全桥整流 发表于 2021-8-9 09:42
while i =while shu 这样理解有没有错

有错,i和shu的变化不一样

2012277033 发表于 2021-8-9 10:03:54

理解存在偏差,赋值是左边等于右边,在python中相当于贴标签,表示这个变量指向这个内存。但是你这里,刚开始i=shu的时候,指向的是同个内存地址,但是当i=shu-1的时候,i的内存地址就变了(因为int类型的内存地址是固定的)。
还有你这里两个的结果不一样是因为外面的whil条件不同,第一个的while条件是shu,所以正常的,第二个条件是i但是i又作为嵌套在里面的whil的条件,所以当里面那个while条件结束的时候,外面也就结束了,所以第二个外面只运行了一次。

全桥整流 发表于 2021-8-9 10:05:04

青出于蓝 发表于 2021-8-9 09:55
有错,i和shu的变化不一样

为什么不一样呢?while循环里面的东西影响不了while i或while shu的吧(就是while的次数已经由我输入的数字决定了,剩下的就是执行while里面的东西,然后又有缩减,所以我觉得影响不了while的次数,不知我表述是否清晰{:5_92:})

全桥整流 发表于 2021-8-9 10:05:56

所以while i 和while shu都是定值

2012277033 发表于 2021-8-9 10:06:11

2012277033 发表于 2021-8-9 10:03
理解存在偏差,赋值是左边等于右边,在python中相当于贴标签,表示这个变量指向这个内存。但是你这里,刚开 ...

while i:结束的条件是i为0
    i= shu - 1
    while i :#结束的条件是i为0
      print('%',end='')
      i = i - 1
    #走到这里时 i就为0了
    print()
    shu= shu - 1

全桥整流 发表于 2021-8-9 10:14:08

2012277033 发表于 2021-8-9 10:06


你的意思是不是第二个while循环的i=0时,第一个while循环同时也结束了?

2012277033 发表于 2021-8-9 10:18:26

全桥整流 发表于 2021-8-9 10:14
你的意思是不是第二个while循环的i=0时,第一个while循环同时也结束了?

是的,你可以在每个层级打印一次i,这样就显而易见了while i:
    i= shu - 1
    print("before i={}".format(i))
    while i :
      print('%',end='')
      i = i - 1
      print("inwhile i={}".format(i))
    print("after i={}".format(i))
    shu= shu - 1
页: [1]
查看完整版本: 赋值左等于右,那我用左和用右按道理一样的吧,为什么运行结果不一样