我只是被困在python打印图案.请帮帮我



我是python编程的初学者,目前正在练习强主题"循环"。一个问题说打印模式。一个B CD e fG h I j等等…

我这样做了,但是我想更进一步。

答。

x = int(input("How much rows you want to print:n"))
letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
k= 0
for row in range(x):
for col in range(row+1):
print(letter[k],end=" ")
k+=1
if k==len(letter):
k ==0
print()

但是当我输入7或更大的数字时,我得到了一个错误。

print(letter[k],end=" ")
list index out of range.

所以据我所知,这是错误的,因为'k'。当'k'达到len(字母)列表结束时,我试图用if语句修复,当k达到len(字母)时将k的值重置为0。但我还是得到同样的错误。请告诉我我做错了什么。

对于一个迭代器来说,这是一个很好的工作,你可以用itertools.islice:

设置:

letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
## NB. you could use ascii.ascii_uppercase
# from string import ascii_uppercase
# letter = list(ascii_uppercase)
n = 6
from itertools import islice
iter_letters = iter(letter) # make a iterator
for i in range(n+1):
print(' '.join(islice(iter_letters, i)))
输出:

A
B C
D E F
G H I J
K L M N O
P Q R S T U

输出7行:

A
B C
D E F
G H I J
K L M N O
P Q R S T U
V W X Y Z

NB。与列表方法一样,这里限制为7行,否则将用完

字母。

避免7行限制:

你甚至可以让你的列表循环使用itertools.cycle:

from itertools import islice, cycle
n = 15
iter_letters = cycle(letter)
for i in range(n+1):
print(' '.join(islice(iter_letters, i)))

输出:


A
B C
D E F
G H I J
K L M N O
P Q R S T U
V W X Y Z A B
C D E F G H I J
K L M N O P Q R S
T U V W X Y Z A B C
D E F G H I J K L M N
O P Q R S T U V W X Y Z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z A
B C D E F G H I J K L M N O P

数组字母有26个元素。你可以指定index从0到25。你显示的错误是提高当指数大于26。

要正确处理索引,可以这样实现print(letter[k % 26], end= " ")

%可计算余数,26以上的数字调整为26以下的相应数字

请试试这个

如果使用列表推导式,代码将更短,看起来更聪明。

for row in range(x):
print(" ".join([letter[(k+col)%26] for col in range(row+1)]))
k += row + 1

这个列表推导式将第二个for语句替换成一行。要使用列表推导式,您将能够编写更像Python的代码。但你不必使用这个技巧。请使用这个代码,如果你想!!

最新更新