用Python垂直翻转ASCII艺术
我正在做的另一个代码需要把一个ASCII图像上下翻转:
*
***
*****
***
***
我想把这个:
***
***
*****
***
*
变成这样:
我现在只有把多行输入读入一个数组的代码,但我该怎么做才能让它把数组的第一行放在最后,把最后一行放在最前面呢?
text = ""
stopword = ""
while True:
line = input()
if line.strip() == stopword:
break
4 个回答
0
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当某个变量的值达到一定的标准时,我们就希望程序能做出反应。这种情况下,我们通常会使用“条件语句”。
条件语句就像是一个判断的开关,它会根据你设定的条件来决定接下来要做什么。如果条件成立,程序就会执行某些代码;如果条件不成立,程序就会跳过这些代码,继续执行后面的部分。
举个简单的例子,想象一下你在做饭。如果锅里水开了,你就可以放面条进去;如果水没开,你就得等一等。这里“水开了”就是条件,而放面条就是要执行的操作。
在编程中,我们可以用类似“如果……那么……”的语句来实现这种逻辑。这样,程序就能根据不同的情况做出不同的反应。
for item in lines[::-1]:
print item
1
这是一个合理的使用场景,可以用来处理一个叫做 deque
的数据结构。你可以用 .extendleft
方法来添加任何可迭代的对象,比如列表或其他序列。
from collections import deque
stop_word = '' # an empty line causes a stop
lines_until_stop = iter(input, stopword)
d = deque()
d.extendleft(lines_until_stop)
print(*d, sep='\n')
1
你可以通过使用 reversed
来简化所有内容,只需把所有的行反向排列。
>>> art = '''
... *
... ***
... *****
... ***
... ***
... '''
>>> print('\n'.join(reversed(art.splitlines())))
***
***
*****
***
*
今天我心情不错,所以给你一个完整的例子:
text = ""
stopword = "END"
lines = []
while True:
line = input()
if line.strip() == stopword:
break
lines.append(line)
print('\n'.join(reversed(lines)))
1
你可以把每一行都加到一个行的列表里(用list.append
),然后在打印之前把这个列表反转一下(用list[::-1]
):
lines = []
stopword = ""
while True:
line = input()
if line.strip() == stopword:
break
lines.append(line) # Add to the list of lines
for line in lines[::-1]: # [::-1] inverts the list
print(line)