全局变量的奇怪问题&for循环

2024-10-04 03:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天在胡闹,决定创建一个程序,打印出一个海滩,不幸的是,它没有工作的方式,我希望它。以下是它的源代码:

def beach1():
    for i in range(7):
        global beach, water, land
      (beach, water, land) = (5, 0 + 5, 35 - 5)
        print(''.join(['o' for i in range(land)])+''.join(['*' for i in  range(beach)])+''.join(['~' for i in range(water)]))
beach1()

以下是电流输出:

oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~
oooooooooooooooooooooooooooooo*****~~~~~

这是我想要它输出的:

oooooooooooooooooooooooooooooo*****~~~~~
ooooooooooooooooooooooooo*****~~~~~~~~~~
oooooooooooooooooooo*****~~~~~~~~~~~~~~~
ooooooooooooooo*****~~~~~~~~~~~~~~~~~~~~
oooooooooo*****~~~~~~~~~~~~~~~~~~~~~~~~~
ooooo*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我期望输出改变的原因是因为三个变量,landbeach,和water。因为这些变量是全局的,所以它们保留它们的值,所以每当for循环重复时,land的值将下降5。因此,每次循环重复时,输出的land部分将少打印5次。反之亦然的水部分的输出。当我在脑子里想出这个主意的时候,它看起来是可行的,但现在不行了。我做错了什么?感谢您的帮助,谢谢!另外,如果你能想出一个更好的标题,请随意,我当然不能


Tags: in程序for源代码def方式rangeglobal
2条回答

你也可以让你的指纹更简单

>>> for i in range(1,8):
...     print('%s%s%s' % ('o'*5*(7-i), '*'*5, '~'*5*(i)))
... 
oooooooooooooooooooooooooooooo*****~~~~~
ooooooooooooooooooooooooo*****~~~~~~~~~~
oooooooooooooooooooo*****~~~~~~~~~~~~~~~
ooooooooooooooo*****~~~~~~~~~~~~~~~~~~~~
oooooooooo*****~~~~~~~~~~~~~~~~~~~~~~~~~
ooooo*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

问题是您正在使用以下设置3个区域的大小:

(beach, water, land) = (5, 0 + 5, 35 - 5)

它是一个常量值,所以在for循环期间它不会改变!你知道吗

只需使值依赖于i,如下所示:

for i in range(8):
    (beach, water, land) = (5, 5+5*i, 35-5*i)

此外,第5行的主循环和内部循环使用相同的变量i。你必须重新命名其中一个!你知道吗

相关问题 更多 >