今天我在搞怪,并决定创建一个打印出海滩的程序,不幸的是,它并没有按照我想要的方式工作。以下是它的源代码:
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*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我希望输出更改的原因是由于三个变量land
,beach
和water
。由于这些变量是全局变量,因此它们保留了它们的值,因此每次for
循环重复时,land
的值将减少5.因此输出的地面部分将被打印每次循环重复5次。反之亦然,输出的水部分。当我在脑海中提出这个想法时,似乎它会起作用,但现在它并没有。我究竟做错了什么?感谢所有帮助,谢谢!另外,如果你能想出一个更好的头衔,请随意,我当然不能。
答案 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*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~