从列表中获取数字并绘制图案
Get numbers from list and draw pattern
我有以下列表[2,7,4]
。我需要从列表中取出数字,我想得到这样的输出:
*
*
*
* *
* *
* * *
* * *
[2, 7, 4]
我写了以下内容:
a=eval(input())
for j in range(len(a)):
print(a[j],end=" ")
for i in range(0,a[j]):
print(" *",end=" ")
print()
但是当我给出这个列表时,我得到这个输出:
2 * *
7 * * * * * * *
4 * * * *
打印总是从上到下,所以你需要找到数组中最大的数字才能从上到下打印它。
然后你必须从那个数字循环回到零并在适当的地方打印一个星号。在这种情况下,您可以将数字视为高度。例如,如果高度为 6,则必须仅在第二列打印星号(因为 7 >= 6),如果高度为 3,则需要在最后两列打印星号(因为 7 >= 3和 4 >= 3)。这是它在代码中的样子:
arr = [2, 7, 4]
max_num = max(arr)
# Determine if an asterisk or a space needs to be printed, based on a array
# element and the current height.
def calc_output(array_element, cur_height):
if array_element >= cur_height:
return "*"
return " "
# Loop from max_num to 1.
for x in range(max_num, 0, -1):
line = ""
# For every element in arr, determine if an asterisk need to be printed.
for elem in arr:
line += "{} ".format(calc_output(elem, x))
print(line)
# Print the elements of arr separated with a space.
print(*arr)
这输出:
*
*
*
* *
* *
* * *
* * *
2 7 4
它也适用于任何其他数字列表。例如,arr = [4, 1, 3, 0, 4]
:
* *
* * *
* * *
* * * *
4 1 3 0 4
如果您考虑以下几点,就可以解决这个问题:
您需要知道列表中的最大值,这样您就知道需要打印多少行。考虑到 [2, 7, 4]
是您的列表,7
是最大值。
您可以使用 for 循环和最大值 (max_value
) 的值轻松打印以下模式:
for i in range(max_value):
print(i)
哪个输出是:
7
6
5
4
3
2
1
对于列表中的每个元素,如果列表中的元素小于或等于列表中的当前索引 i
,则在每一行打印 '* '
循环。否则,打印 ' '
。
打印一行后,您需要移至下一行。
最后,您只需打印列表即可。
以下代码是上述算法的实现。我添加了显示算法步骤的内联注释:
l = l = [2, 7, 4]
max_value = max(l)
for i in range(max_value, 0, -1):
for e in l:
print('* ' if e >= i else ' ', end='')
print()
print(*l)
max_value = max(l) # 1
for i in range(max_value, 0, -1): # 2
for e in l:
print('* ' if e >= i else ' ', end='') # 3
print() # 4
print(*l) # 5
输出
*
*
*
* *
* *
* * *
* * *
2 7 4
请记住,这适用于列表中介于 0
和 9
(含)之间的元素。
我有以下列表[2,7,4]
。我需要从列表中取出数字,我想得到这样的输出:
*
*
*
* *
* *
* * *
* * *
[2, 7, 4]
我写了以下内容:
a=eval(input())
for j in range(len(a)):
print(a[j],end=" ")
for i in range(0,a[j]):
print(" *",end=" ")
print()
但是当我给出这个列表时,我得到这个输出:
2 * *
7 * * * * * * *
4 * * * *
打印总是从上到下,所以你需要找到数组中最大的数字才能从上到下打印它。
然后你必须从那个数字循环回到零并在适当的地方打印一个星号。在这种情况下,您可以将数字视为高度。例如,如果高度为 6,则必须仅在第二列打印星号(因为 7 >= 6),如果高度为 3,则需要在最后两列打印星号(因为 7 >= 3和 4 >= 3)。这是它在代码中的样子:
arr = [2, 7, 4]
max_num = max(arr)
# Determine if an asterisk or a space needs to be printed, based on a array
# element and the current height.
def calc_output(array_element, cur_height):
if array_element >= cur_height:
return "*"
return " "
# Loop from max_num to 1.
for x in range(max_num, 0, -1):
line = ""
# For every element in arr, determine if an asterisk need to be printed.
for elem in arr:
line += "{} ".format(calc_output(elem, x))
print(line)
# Print the elements of arr separated with a space.
print(*arr)
这输出:
*
*
*
* *
* *
* * *
* * *
2 7 4
它也适用于任何其他数字列表。例如,arr = [4, 1, 3, 0, 4]
:
* *
* * *
* * *
* * * *
4 1 3 0 4
如果您考虑以下几点,就可以解决这个问题:
您需要知道列表中的最大值,这样您就知道需要打印多少行。考虑到
[2, 7, 4]
是您的列表,7
是最大值。您可以使用 for 循环和最大值 (
max_value
) 的值轻松打印以下模式:
for i in range(max_value):
print(i)
哪个输出是:
7
6
5
4
3
2
1
对于列表中的每个元素,如果列表中的元素小于或等于列表中的当前索引
i
,则在每一行打印'* '
循环。否则,打印' '
。打印一行后,您需要移至下一行。
最后,您只需打印列表即可。
以下代码是上述算法的实现。我添加了显示算法步骤的内联注释:
l = l = [2, 7, 4]
max_value = max(l)
for i in range(max_value, 0, -1):
for e in l:
print('* ' if e >= i else ' ', end='')
print()
print(*l)
max_value = max(l) # 1
for i in range(max_value, 0, -1): # 2
for e in l:
print('* ' if e >= i else ' ', end='') # 3
print() # 4
print(*l) # 5
输出
*
*
*
* *
* *
* * *
* * *
2 7 4
请记住,这适用于列表中介于 0
和 9
(含)之间的元素。