我只是在打印图案时陷入 python。请帮帮我

I am just stuck in python at printing a pattern. Please help me out

我是 python 编程的初学者,目前正在练习强主题 'loop'。 一个说打印以下模式的问题。 一种 BC D E F G 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(letter) 列表结束时,我尝试使用 if 语句修复,当它到达 len(letter) 时将 k 的值重置为 0。 但我仍然遇到同样的错误。 请告诉我我做错了什么。

字母数组有26个元素。 所以你可以指定从 0 到 25 的索引。 当 index 大于 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 的代码。 但是您不必使用此技术。 如果需要,请使用此代码!!

对于迭代器来说,这是一个很好的工作,您可以使用 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

注意。就像列表方法一样,这里限制为 7 行,否则你将 运行 out letters

避免 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