【问题标题】:Print a list of heights with "#" symbol打印带有“#”符号的高度列表
【发布时间】:2019-09-10 15:45:01
【问题描述】:

今天我给你带来一个看似简单的问题,它并不像看起来那么简单(至少对我来说)!

假设我有以下整数列表:

num = [3,1,1,2]

我想打印与高度对应的“$”,即:


&
&     & 
& & & &



for i in num:
    print("#"*i)


打印这个:


& & &
&
&
& &


但是我希望显示前者!

我试过了:


for i in range(1, max(num)+1): # loops through the rows 
   for j in num:
       if j == i:
            print("#")
       else:
            print("")

但过了一会儿,我明白这个条件没有任何意义,因为我正在将行号与高度进行比较!

我尝试了其他东西,但没有一个能正常工作,如果有人能帮助我,我将不胜感激! 谢谢

【问题讨论】:

  • 您可以将它们存储在矩阵中,然后转置并打印。
  • 你将如何将这些值存储在矩阵中? (没有 numpy)
  • 好的,你能显示输入 [1, 3, 1, 1, 2, 5] 的预期输出吗?
  • @RomanPerekhrest,列表中的每个数字对应于垂直符号的数量,因此您将有 1 个符号、3 个符号、1 个符号……m 5 个符号全部水平显示
  • 您使用的是$& 还是#,您的问题自始至终都不一致。

标签: python printing


【解决方案1】:

我会从最大数字向后迭代,检查列表中的每个元素是否大于或等于该数字,然后打印所需的字符,否则打印空格。

>>> for x in range(max(num), 0, -1):
...     print(''.join(['&' if i >= x else ' ' for i in num]))
...
&
&  &
&&&&

【讨论】:

  • 横&之间应该有空格
  • 应该是' '.join(...,你可以删除& 里面的空格,让它更具可读性。
  • @joumaico 现在开心吗? :P
  • @joumaico 它只是弄乱了打印语句中的间距,所以如果我这样做,它会排错。
  • 第 2 行显示不正确,第一列和最后一列应该有 $,第 3 列有符号,应该在第 4 列(最后一列)!
【解决方案2】:

一个好问题!这是我在不使用任何包的情况下的看法

def printH(nList):
    m = max(nList)
    while m > 0:
        for l in nList:
            if(l>=m):
                print('#',end = ' ')
            else:
                print(' ',end = ' ')
        print('')
        m-=1
num = [5,3,1,1,2]
printH(num)

预期输出:

#
#
# #
# #     #
# # # # #

【讨论】:

  • 我只比较循环第一遍的最大值(所以是最大高度)。在这个过程中:所有具有最大高度的列都用“#”打印。在下一次运行中,我将使用最大高度 -1(请参阅 m-=1)检查它,这会打印出所有具有最大高度 -1 的“#”。这一直持续到我们达到 m = 0(即不再有高度)。尝试在“for l in nList”之后通过 print(m) 修改我的代码,以便您可以跟踪 m。如果这种解释没有意义,请告诉我。
猜你喜欢
  • 2019-10-28
  • 2012-01-12
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多