python 可以在函数中打印多行时识别打印语句中的模式吗?
Can python recognise patterns in the printed statements while printing more than one line in a function?
我有一个函数可以一行一行地打印一堆行。它接受不同符号的输入,然后根据 if 条件用这些符号替换列表中的字符串 obj。
例如:
original_string = ["|-----", "|-----", "|-----", "|-----", "|-----"]
my_list = ['*', '+']
def foo(my_list):
new_string = original_string[:]
for i in range(len(original_string)):
# The following if condition changes often to print different patterns.
# I've evaluated it to give an even integer for simplicity purposes
if i % 2 == 0:
new_string.pop(i)
new_string.insert(i, f"|--{my_list[0]}--")
print(new_string)
foo(my_list)
我得到以下输出:
['|--*--', '|-----', '|-----', '|-----', '|-----']
['|--*--', '|-----', '|-----', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|--*--']
My question is this: How can I can have a python program recognise what output patters were generated and take action accordingly?
我正在寻找的是这样的东西:
这是我的实际代码输出:
Output pattern I want to recognise:
Pattern A:
1 |-------x------------
2 |-----------------x--
3 |-----------------x--
4 |-----------------x--
5 |-------x------------
6 |--------------------
Actual Final Output pattern:
1 |-------3------------------------8--------10------12
2 |-------3---------5--------------8------------------
3 |-----------------5---------7---------9-----------12
4 |--2--------------5-----------------------10------12
5 |-------3---------5---------7-------------10--------
6 |-------3------------------------8--------10------12
So, if Pattern A exists within final output, I should only print position of pattern A in the output and x should be replaced by the fret position numbers as found in the actual output.
所需的输出如下所示:
1 |-------3------------
2 |-----------------5--
3 |-----------------5--
4 |-----------------5--
5 |-------3------------
6 |--------------------
注意:这里一个位置是5个字符。即“--x--”是一个位置
是的。这称为“记忆化”。您维护输入参数(键)和输出(值)的持久字典。每次调用该函数时,首先检查该参数系列是否已被见过。
你可以查查@memoize装饰器,也可以查查与“动态规划”相关的术语。
如果我理解这个问题的症结所在,您的输入将是一个标有停止位置的指板(带有数字的指板)。您想在此面板中识别存储的和弦。
您关注的领域不对。为什么要识别输出形式?这是一堆方便人类使用的字符。为了使其成为一个合理的应用程序,您必须抽象每个和弦的特性,并以更容易与类似抽象的指板相匹配的方式存储 that。
如您所说,任何匹配的参数都是起始音品:您需要将和弦“变调夹”多远才能匹配。将其视为笛卡尔平面上的格子。 (0,0) 是您的“变调夹”品格,刚好位于“顶部”,位于图表左上角的虚弦 0(弦 1 上方,高音 E)上。现在,您的示例和弦 Amaj 锚定在高 E 第一品,由(品,弦)对的五个格点表示:
[ (0, 1),
(2, 2),
(2, 3),
(2, 4),
(0, 5) ]
现在,将此翻译成任何音品 f
是
[ (f+0, 1),
(f+2, 2),
(f+2, 3),
(f+2, 4),
(f+0, 5) ]
... 是您要查找的模式,for f in range(12)
,也许。
保留这些品点模式的列表,也许是带有和弦标签的字典。
- 编写一个输入函数,将 6 行指板简化为点矩阵。
- 编写一个输出函数以将结果呈现为所需的 6 行形式,如您的 3+5 Amaj 示例。
- 编写一个匹配函数来遍历存储的和弦。对于每个和弦,将其从第 0 品滑动到您的实际极限,寻找所有点都与输入板匹配的实例。
这是适合您的代码。
xString = '''--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x----x---------x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x----x----x---------x---------x----x---------x---------x----x----x---------x----x----x---------x------------
--x---------x---------x---------x----x---------x---------x----x---------x---------x----x----x---------x-------
--x---------x---------x----x---------x---------x---------x----x---------x---------x----x---------x----x-------
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--'''
print(xString)
print('The pattern for this are :')
for x in xString.split('\n'):
for i in range(0,len(x),5):
if x[i:i+5] == '-----':
print ('-----',end='')
else:
a = i//5
if a > 9: print (f'--{a}-',end='')
else: print (f'--{a}--',end='')
print ()
此代码的输出将是:
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x----x---------x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x----x----x---------x---------x----x---------x---------x----x----x---------x----x----x---------x------------
--x---------x---------x---------x----x---------x---------x----x---------x---------x----x----x---------x-------
--x---------x---------x----x---------x---------x---------x----x---------x---------x----x---------x----x-------
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
The pattern for this are :
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0---------2----3---------5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0----1----2---------4---------6----7---------9---------11---12---13--------15---16---17--------19-----------
--0---------2---------4---------6----7---------9---------11---12--------14--------16---17---18--------20------
--0---------2---------4----5---------7---------9---------11---12--------14--------16---17--------19---20------
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-
我有一个函数可以一行一行地打印一堆行。它接受不同符号的输入,然后根据 if 条件用这些符号替换列表中的字符串 obj。
例如:
original_string = ["|-----", "|-----", "|-----", "|-----", "|-----"]
my_list = ['*', '+']
def foo(my_list):
new_string = original_string[:]
for i in range(len(original_string)):
# The following if condition changes often to print different patterns.
# I've evaluated it to give an even integer for simplicity purposes
if i % 2 == 0:
new_string.pop(i)
new_string.insert(i, f"|--{my_list[0]}--")
print(new_string)
foo(my_list)
我得到以下输出:
['|--*--', '|-----', '|-----', '|-----', '|-----']
['|--*--', '|-----', '|-----', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|-----']
['|--*--', '|-----', '|--*--', '|-----', '|--*--']
My question is this: How can I can have a python program recognise what output patters were generated and take action accordingly?
我正在寻找的是这样的东西:
这是我的实际代码输出:
Output pattern I want to recognise:
Pattern A:
1 |-------x------------
2 |-----------------x--
3 |-----------------x--
4 |-----------------x--
5 |-------x------------
6 |--------------------
Actual Final Output pattern:
1 |-------3------------------------8--------10------12
2 |-------3---------5--------------8------------------
3 |-----------------5---------7---------9-----------12
4 |--2--------------5-----------------------10------12
5 |-------3---------5---------7-------------10--------
6 |-------3------------------------8--------10------12
So, if Pattern A exists within final output, I should only print position of pattern A in the output and x should be replaced by the fret position numbers as found in the actual output.
所需的输出如下所示:
1 |-------3------------
2 |-----------------5--
3 |-----------------5--
4 |-----------------5--
5 |-------3------------
6 |--------------------
注意:这里一个位置是5个字符。即“--x--”是一个位置
是的。这称为“记忆化”。您维护输入参数(键)和输出(值)的持久字典。每次调用该函数时,首先检查该参数系列是否已被见过。
你可以查查@memoize装饰器,也可以查查与“动态规划”相关的术语。
如果我理解这个问题的症结所在,您的输入将是一个标有停止位置的指板(带有数字的指板)。您想在此面板中识别存储的和弦。
您关注的领域不对。为什么要识别输出形式?这是一堆方便人类使用的字符。为了使其成为一个合理的应用程序,您必须抽象每个和弦的特性,并以更容易与类似抽象的指板相匹配的方式存储 that。
如您所说,任何匹配的参数都是起始音品:您需要将和弦“变调夹”多远才能匹配。将其视为笛卡尔平面上的格子。 (0,0) 是您的“变调夹”品格,刚好位于“顶部”,位于图表左上角的虚弦 0(弦 1 上方,高音 E)上。现在,您的示例和弦 Amaj 锚定在高 E 第一品,由(品,弦)对的五个格点表示:
[ (0, 1),
(2, 2),
(2, 3),
(2, 4),
(0, 5) ]
现在,将此翻译成任何音品 f
是
[ (f+0, 1),
(f+2, 2),
(f+2, 3),
(f+2, 4),
(f+0, 5) ]
... 是您要查找的模式,for f in range(12)
,也许。
保留这些品点模式的列表,也许是带有和弦标签的字典。
- 编写一个输入函数,将 6 行指板简化为点矩阵。
- 编写一个输出函数以将结果呈现为所需的 6 行形式,如您的 3+5 Amaj 示例。
- 编写一个匹配函数来遍历存储的和弦。对于每个和弦,将其从第 0 品滑动到您的实际极限,寻找所有点都与输入板匹配的实例。
这是适合您的代码。
xString = '''--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x----x---------x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x----x----x---------x---------x----x---------x---------x----x----x---------x----x----x---------x------------
--x---------x---------x---------x----x---------x---------x----x---------x---------x----x----x---------x-------
--x---------x---------x----x---------x---------x---------x----x---------x---------x----x---------x----x-------
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--'''
print(xString)
print('The pattern for this are :')
for x in xString.split('\n'):
for i in range(0,len(x),5):
if x[i:i+5] == '-----':
print ('-----',end='')
else:
a = i//5
if a > 9: print (f'--{a}-',end='')
else: print (f'--{a}--',end='')
print ()
此代码的输出将是:
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x---------x----x---------x---------x---------x----x---------x---------x---------x----x---------x----x----x--
--x----x----x---------x---------x----x---------x---------x----x----x---------x----x----x---------x------------
--x---------x---------x---------x----x---------x---------x----x---------x---------x----x----x---------x-------
--x---------x---------x----x---------x---------x---------x----x---------x---------x----x---------x----x-------
--x---------x---------x----x---------x---------x----x---------x---------x---------x----x---------x----x----x--
The pattern for this are :
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0---------2----3---------5---------7---------9----10--------12--------14--------16---17--------19---20---21-
--0----1----2---------4---------6----7---------9---------11---12---13--------15---16---17--------19-----------
--0---------2---------4---------6----7---------9---------11---12--------14--------16---17---18--------20------
--0---------2---------4----5---------7---------9---------11---12--------14--------16---17--------19---20------
--0---------2---------4----5---------7---------9----10--------12--------14--------16---17--------19---20---21-