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

时间:2014-06-12 18:34:38

标签: 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*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我希望输出更改的原因是由于三个变量landbeachwater。由于这些变量是全局变量,因此它们保留了它们的值,因此每次for循环重复时,land的值将减少5.因此输出的地面部分将被打印每次循环重复5次。反之亦然,输出的水部分。当我在脑海中提出这个想法时,似乎它会起作用,但现在它并没有。我究竟做错了什么?感谢所有帮助,谢谢!另外,如果你能想出一个更好的头衔,请随意,我当然不能。

2 个答案:

答案 0 :(得分:2)

问题是你用这个来设置3个区域的大小:

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

这是一个常数值,因此在for循环期间它不会改变!

Juste使值取决于i,如下所示:

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

此外,您对主循环使用相同的变量i,在第5行使用内循环。您必须重命名其中一个变量!

答案 1 :(得分:2)

你也可以让你的打印更简单......

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