使用python中的for循环创建多行字符串

问题描述 投票:0回答:2

我正在尝试通过return函数获取文本,以连接成多行字符串,如下所示。

btc_positions=[{
'symbol: BTC', 
'margin_balance: 0.15',
'margin_position: 0.05',
'margin_frozen: 0.01'}]

for pos in btc_positions:
    for attributes in pos:
        text = f"{attributes}: {pos[attributes]}"
    return text

文本采用这种格式(符号:BTC),但在函数外引发错误“ return”。

控制台错误:python shitcoin_alerts.py 文件“ shitcoin_alerts.py”,第34行 返回文字 ^语法错误:在函数外部“返回”。固定! (必须在函数内部使用return)

我的意图是返回文本以在下面创建多行字符串。但是似乎找不到我能做到的任何方式。

multiline_text = f'''
symbol={symbol},
margin_balance: {margin_balance},
margin_position:{margin_position},
margin_frozen: {margin_frozen}
'''

此多行字符串的预期输出将是:

-----------------------
symbol=BTC,
margin_balance=0.15,
margin_position=0.05,
margin_available=0.01
----------------------
python
2个回答
1
投票

您有一个for循环,但是循环不需要return语句。您可以break提早退出,continue提早返回循环顶部,或者只是让循环结束。循环中使用的所有变量都可用于循环外部的代码。将其与一个函数进行比较,该函数中的变量对于调用该函数的事物不可用。就您而言,您可以使用外部列表来保存在循环中创建的每个格式化字符串。

set中的字符串很容易分成名称/值对。它们可用于创建dict,然后可将其用于以所需方式格式化输出字符串。

btc_positions=[{
'symbol: BTC', 
'margin_balance: 0.15',
'margin_position: 0.05',
'margin_frozen: 0.01'}]

# turn btc_positions set into dict for print parameters
btc_position_params = [
    dict(value.split(": ") for value in position)
    for position in btc_positions]


# create new list of formatted output
multiline_text_list = []
for pos in btc_position_params:
    multiline_text_list.append('''symbol={symbol},
margin_balance={margin_balance},
margin_position={margin_position},
margin_frozen={margin_frozen}'''.format(**pos))

# show result
for pos_text in multiline_text_list:
    print("--------------------")
    print(pos_text)
print("--------------------")

0
投票
btc_positions=[{ 'symbol: BTC', 'margin_balance: 0.15', 'margin_position: 0.05', 'margin_frozen: 0.01'},
               { 'symbol: BTC2', 'margin_balance: 0.15', 'margin_position: 0.05', 'margin_frozen: 0.01'}]

def test(value):
    """
    value: list of sets of strings
    """
    for p in value:  # iterate list
        d = dict(s.split(': ') for s in p)  # turn set of strings to dict
        d = sorted(d.items(), key=lambda x: x[1], reverse=True)  # reverse sort into list of tuples
        l = '-' * 15  # dashed line
        fin = f'{l}\n'  # create string to print 
        for v in d:
            fin += '='.join(v)
            fin += '\n'
        fin += l

        print(fin)


test(btc_positions)

---------------
symbol=BTC
margin_balance=0.15
margin_position=0.05
margin_frozen=0.01
---------------
---------------
symbol=BTC2
margin_balance=0.15
margin_position=0.05
margin_frozen=0.01
---------------
© www.soinside.com 2019 - 2024. All rights reserved.