Python,使用 print() 和 replace() 函数来解释字符串给出的代码
Posted
技术标签:
【中文标题】Python,使用 print() 和 replace() 函数来解释字符串给出的代码【英文标题】:Python, using print() and replace() function to interpret code given by string 【发布时间】: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只有一个非常基本的了解,所以我现在很困。
【问题讨论】:
欢迎来到 SO。请查看***.com/help/how-to-ask 并提供一个Minimal example 来说明您迄今为止所尝试的内容。 【参考方案1】:首先要认识到,在终端中打印是从左到右,然后从上到下。一次一行。由于您的数据被转置(每个值属于一列,而不是一行),因此您需要先缓冲整个数据集,然后再打印它。在伪代码中应该是这样的:
-
将字符串标记为数字列表
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
你的例子:
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 = ''
我正在努力想出更好的方法来做到这一点。
【讨论】:
以上是关于Python,使用 print() 和 replace() 函数来解释字符串给出的代码的主要内容,如果未能解决你的问题,请参考以下文章
longest-repeating-character-replacement(难)