Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对多个字符串变量应用相同的格式_Python_Python 3.x - Fatal编程技术网

Python 对多个字符串变量应用相同的格式

Python 对多个字符串变量应用相同的格式,python,python-3.x,Python,Python 3.x,我正在编写菜单。选项1、2和3将填充项目。选项4、5和6取决于项目的值。如果project==None,我想删除选项4、5和6 project = None menuOptions = {0 : 'Option4', 1 : 'Option5', 2 : 'Option6'} print(""" Choose: ━━━━━━━━━━━━ Text ━━━━━━━━━━━━ 1 : Option1 2 : Option2 3 : Option3 ━━━━━━━

我正在编写菜单。选项1、2和3将填充
项目
。选项4、5和6取决于
项目的值。如果
project==None
,我想删除选项4、5和6

project = None
menuOptions = {0 : 'Option4', 1 : 'Option5', 2 : 'Option6'}

print("""
Choose:

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
1 : Option1 
2 : Option2
3 : Option3

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
4 : {0}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
5 : {1}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
6 : {2}     

    
0 : Exit""".format('\u0336'.join(menuOptions[0]) + '\u0336' if project == None else menuOptions[0],
                   '\u0336'.join(menuOptions[1]) + '\u0336' if project == None else menuOptions[1],
                   '\u0336'.join(menuOptions[2]) + '\u0336' if project == None else menuOptions[2]))
上面的代码工作得很好,但我想知道是否有一种方法可以根据这个想法减少必要的代码:

format( 
    for opt in menuOptions: 
        '\u0336'.join(menuOptions[opt]) + '\u0336' if project == None else menuOptions[opt]
)

目标是能够将新元素添加到菜单选项中,在菜单中显示它们并应用相同的格式,而无需对其进行“硬编码”。

因此,不确定这是否是您想要的,但您可以通过这样做稍微减少“硬编码”:

# list comprehension to get format options 
# (you can use a loop here instead for more readability if needed)
x = ['\u0336'.join(menuOptions[opt]) + '\u0336' if project == None else menuOptions[opt] for opt in menuOptions]

print("""
Choose:

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
1 : Option1 
2 : Option2
3 : Option3

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
4 : {0}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
5 : {1}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
6 : {2} 

    
0 : Exit""".format(*x))


*
操作员为您解压列表。

因此不确定这是否是您想要的,但您可以通过执行以下操作稍微减少“硬记录”:

# list comprehension to get format options 
# (you can use a loop here instead for more readability if needed)
x = ['\u0336'.join(menuOptions[opt]) + '\u0336' if project == None else menuOptions[opt] for opt in menuOptions]

print("""
Choose:

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
1 : Option1 
2 : Option2
3 : Option3

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
4 : {0}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
5 : {1}

━━━━━━━━━━━━ Text ━━━━━━━━━━━━
6 : {2} 

    
0 : Exit""".format(*x))


*
操作员为您解压列表。

您可以在此处使用星号理解:

"""...""".format(*('\u0336'.join(opt) + '\u0336' if project is None else opt
                   for opt in menuOptions))

您可以在此处使用星号理解:

"""...""".format(*('\u0336'.join(opt) + '\u0336' if project is None else opt
                   for opt in menuOptions))

工作正常,只需更改
.join(opt)
.join(menuOptions[opt])
。谢谢,我不知道参数解包。工作正常,只需将
.join(opt)
更改为
.join(menuOptions[opt])
。谢谢,我不知道拆包的事。