Python,使用print()和replace()函数解释由字符串给出的代码

Python,使用print()和replace()函数解释由字符串给出的代码,python,python-3.x,replace,printing,wave,Python,Python 3.x,Replace,Printing,Wave,假设我有一个字符串形式的代码,例如: str(00012333210-1) 这些数字与我想要绘制的波的某个振幅有关 我想将代码转换为可打印的波形,其中数字由星号替换,例如: 3: *** 2: * * 1: * * 0:*** * -1: * -2: -3: 有什么有用的工具来做这件事吗 到目前为止,我已经尝试将字符串拆分为单独的数字,但我仍在努力处理否定项 例如: file = "000123332101233321000

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

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

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

 3:     ***
 2:    *   *
 1:   *     *
 0:***       *
-1:           *
-2:
-3:
有什么有用的工具来做这件事吗

到目前为止,我已经尝试将字符串拆分为单独的数字,但我仍在努力处理否定项

例如:

file = "000123332101233321000"
x = [int(i) for i in file]
print(x)
L = [0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 0, 1, 2, 3, 3, 3, 2, 1, 0, 0, 0]

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

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

for y in range(max(L), min(L) - 1, -1):
    for val in L:
        print('*' if val == y else ' ', end='')
    print() # next line
  • 将字符串标记为数字列表
    L
  • 计算
    max(L)
    。从这个循环到
    min(L)
  • 在每次迭代中(这是一行输出),循环
    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
    
    例如:

    file = "000123332101233321000"
    x = [int(i) for i in file]
    print(x)
    
    L = [0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 0, 1, 2, 3, 3, 3, 2, 1, 0, 0, 0]
    
    它打印:

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

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

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

    我正试图想出更好的方法来做到这一点。

    欢迎来到SO。请看一看,并提供您迄今为止所尝试的内容。