精简脚本

2024-09-30 22:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

来自Python新手的问题。作为一个实践项目,我正在为我的一个兄弟姐妹编写一个简单的游戏。基本思想是从存储在数据库中的各种设备列表中创建代理加载

我正在寻找一种方法来简化我的代码,这是可行的,但非常笨拙和冗长

我列出了以下几个清单:

assault_rifles = ["M4A1-S", "AK-47", "FN Scar 17S", "AAC HoneyBadger", "HK G36 RDS"]
side_arms = ["FN Five-Seven", "SIG Saur P250", "M1911", "HK P30L", "CZ P-10 C"]
precision_rifles = ["CZ TSR", "HK PSG-1", "Mossberg MVP Precision", "SVD Dragunov", "Tikka T3x TAC A1"]
agent_loadout = []

代理登录后,系统会询问他要访问哪个数据库,然后从该数据库中,他可以选择一个项目附加到名为“代理加载”的列表中。现在,我使用while循环和if/elif/else语句实现了该功能,但这样做需要大量重复的代码块,如下所示:

while True:
        dbChoice = input(": ")
        if dbChoice in ("1", "2", "3", "4"):
            break
        print("Invalid entry")
# After this, repeat code for "2" "3", etc
    if dbChoice == "1":
        print("Accessing Assault Rifle Database")
        print("The following Assault Rifles are available:")
        for AR in (assault_rifles):
            print(assault_rifles.index(AR) + 1, AR)
        selection = int(input("Enter the number of the item to add to your loadout: "))
        agent_loadout.append(assault_rifles[selection-1])
        print("Your Current Loadout:")
        for item in (agent_loadout):
            print(agent_loadout.index(item) + 1, item)

然后我必须重复我放置注释的代码,将“2”指定给[侧面武器],“3”指定给[精确步枪],等等

所以,我的问题是:我怎样才能把它浓缩成一个更容易阅读、更精简的脚本呢

我有一个想法:

  1. 我可以做一本这样的字典:
{"1":assault_rifles,"2":side_arms,"3":precision_rifles}

也许还可以将上面的每一个列表都编入一个字典,其中包含自己的关键字值, 然后生成如下函数(在伪代码中):

def choose_db():
     have agent input choice of database
     print database, corresponding to agents choice of number
     have agent input choice of weapon
     append chosen weapon to agent_loadout list

这个功能是可行的解决方案吗?如果是这样,我可以使用有关如何分配整数键(或数字字符串?)输入的语法的帮助来从字典返回相应的值!如果有人知道一个好的语法,请张贴。提前谢谢


Tags: ofto代码数据库代理列表inputif
1条回答
网友
1楼 · 发布于 2024-09-30 22:23:43

我会把所有的“枪”放在一个字典中,以枪的类型作为键,然后每个键的值可以是枪的列表

guns = {"assault_rifles" : ["M4A1-S", "AK-47", "FN Scar 17S", "AAC HoneyBadger", "HK G36 RDS"], "side_arms" : ["FN Five-Seven", "SIG Saur P250", "M1911", "HK P30L", "CZ P-10 C"] , "precision_rifles" : ["CZ TSR", "HK PSG-1", "Mossberg MVP Precision", "SVD Dragunov", "Tikka T3x TAC A1"]}

为了便于选择武器,您可以让用户输入一对数字。第一个数字可以是枪类型的索引,第二个数字可以是他们想要使用的枪的索引,例如0,1可以是“突击步枪”类别和AK。这样,您就不必在用户每次选择枪时都要求用户提供数据库。你可以把这本字典打印出来让用户看,这样他们的输入就容易多了,还可以在每支枪被追加时打印出他们当前的库存

或者你可以问他们想要用的枪,然后在字典里搜索,假设没有重复的

如果你的列表更大,我唯一能想到的就是把它做成一个GUI

相关问题 更多 >