我只是在打印图案时陷入 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
我是 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