首页 > 解决方案 > 我只是在打印模式时被困在 python 中。请帮帮我

问题描述

我是 python 编程的初学者,目前正在练习强大的主题“循环”。一个说打印以下模式的问题。BC DEF GHIJ 等等...

所以我做到了,但我想更进一步。

答。

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语句修复当它到达len(字母)时将k的值重置为0。但我仍然遇到同样的错误。请告诉我我做错了什么。

标签: pythonlistnested-loops

解决方案


对于可以切片的迭代器来说,这是一项不错的工作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 行,否则你会用完字母

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

推荐阅读