【问题标题】:Python, using print() and replace() function to interpret code given by stringPython,使用 print() 和 replace() 函数来解释字符串给出的代码
【发布时间】:2018-04-14 08:47:41
【问题描述】:

假设我有一个以字符串形式给出的代码,例如: str(00012333210-1)

这些数字与我想要绘制的波形的某个振幅有关。

我想将代码转换为可打印的波形,其中数字被星号替换,例如:

 3:     ***
 2:    *   *
 1:   *     *
 0:***       *
-1:           *
-2:
-3:

有什么有用的工具来做这件事吗?

到目前为止,我已经尝试将字符串拆分为单独的数字,但我正在努力解决否定问题。

例如:

file = "000123332101233321000"
x = [int(i) for i in file]
print(x)

我对python只有一个非常基本的了解,所以我现在很困。

【问题讨论】:

标签: python python-3.x replace printing wave


【解决方案1】:

首先要认识到,在终端中打印是从左到右,然后从上到下。一次一行。由于您的数据被转置(每个值属于一列,而不是一行),因此您需要先缓冲整个数据集,然后再打印它。在伪代码中应该是这样的:

  1. 将字符串标记为数字列表L
  2. 计算max(L)。从这里循环到min(L)
  3. 在每次迭代(即一行输出)中,循环 L,并在 L 中的值与循环索引匹配时打印一个星号,否则打印一个空格。

第二步和第三步是这样的:

for y in range(max(L), min(L) - 1, -1):
    for val in L:
        print('*' if val == y else ' ', end='')
    print() # next line

你的例子:

L = [0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 0, 1, 2, 3, 3, 3, 2, 1, 0, 0, 0]

打印出来:

     ***     ***     
    *   *   *   *    
   *     * *     *   
***       *       ***

【讨论】:

    【解决方案2】:

    您可以使用以下代码将字符串转换为整数列表:

    y = '00012333210-1'
    nums = []
    
    for i in y:
        if i == '-':
            sym = i
            continue
        nums.append(int(sym+i))
        sym = ''
    

    我正在努力想出更好的方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 2013-04-07
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2010-10-03
      相关资源
      最近更新 更多