我的问题几乎与Python的字母金字塔相同。我想要与该问题相同的输出,即由字母组成的金字塔。所需的输出:
a
aba
abcba
abcdcba
abcdedcba
abcdefedbca
abcdefgfedcba
abcdefghgfedcba
abcdefghihgfedcba
abcdefghijihgfedcba
abcdefghijkjihgfedcba
abcdefghijklkjihgfedcba
abcdefghijklmlkjihgfedcba
abcdefghijklmnmlkjihgfedcba
abcdefghijklmnonmlkjihgfedcba
OP在该问题中提供的代码是:
defpyramid():formiddle_letterinrange(ord("a"),ord("o")+1):forletterinrange(ord("a"),ord(middle_letter)+1):printchr(letter),forletterinreversed(range(ord("a"),ord(middle_letter))):printchr(letter),middle_letter+=1pyramid()
此代码不提供所需的输出。代码中的函数也不使用任何参数。该问题的答案导入了现代的print()功能,但我不允许这样做。我不允许使用任何导入功能,并且我必须坚持使用python 2.7。要求是我必须使用带有参数的函数,金字塔的期望结果必须具有15个级别,并且屏幕宽度为80个字符。
我尝试使用带有参数的函数来在屏幕中间打印一个字母,范围为15,现在我可以在一行中间打印一个字母,但是我不知道如何制作从a到aba再到abcba等
deflevel_center(letter):foriinrange(15):middle=letter.center(80)printmiddle
level_center('b')
使用我的代码,我得到的输出是:
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
我知道使用我当前的函数,调用level_center()只会在每个级别上打印一个字母。但是我不知道从这里去哪里。
如何以其他方式改进我的OP代码或我的代码,以便在坚持要求的同时获得期望的结果(使用带参数的功能,屏幕宽度为80个字符,15层的功能必须在没有导入功能的情况下工作(从将来开始)导入print_function行))?
解决方案
我认为这是最有效的方法。
码
defpyramid(alphabet,layer=1):whilelayer<=15:# alphabet[:15] goes 0 to 14temp_alphabet=alphabet[:layer]pyramid_layer=''.join([letterforletterintemp_alphabet]+[letterforletterinreversed(temp_alphabet[:-1])])print('{:^32}'.format(pyramid_layer))layer+=1alphabet=list(map(chr,range(97,123)))pyramid(alphabet)
说明:
alphabet是传递给函数的字母字符的列表。
循环直到第15个字符=>'o'。
存储一个临时字母,直到对应的字母layer-在while循环中动态变化。
使用列表理解功能创建2个列表。首先将字母向前,然后将字母向后(最后一个字母除外)以避免重复。添加这些列表,并' '.join( )形成一个字符串(对应于layer),其中每个字符都用空格分隔。
格式化图层字符串,使其居中放置在32单位宽的字段中并进行打印。这样可以确保图层居中形成金字塔。您可以选择任何宽度单位值。
增加layer变量以最终退出while循环。
输出:
a
aba
abcba
abcdcba
abcdedcba
abcdefedcba
abcdefgfedcba
abcdefghgfedcba
abcdefghihgfedcba
abcdefghijihgfedcba
abcdefghijkjihgfedcba
abcdefghijklkjihgfedcba
abcdefghijklmlkjihgfedcba
abcdefghijklmnmlkjihgfedcba
abcdefghijklmnonmlkjihgfedcba