繁体   English   中英

我怎样才能用这个制作一个 function 所以我不必复制粘贴相同的代码?

[英]How can i make a function out of this so i don't have to copy paste the same piece of code?

目前在我的代码中,我只是复制和粘贴了 20 多次这样的代码块,我需要一些帮助来了解如何将其变成 function 以节省空间

if chosenrace == "Var Human":
    randclass = random.choice(varhumanclasses)

if chosenrace == "Aasimar":
    randclass = random.choice(aasimarclasses)

if chosenrace == "Aarakocra":
    randclass = random.choice(aarakocraclasses)

if chosenrace == "Warforged":
    randclass = random.choice(warforgedclasses)

一个可能的解决方案是创建一个将字符串链接到变量的字典。 例如,

class_dict = {
"Var Human": varhumanclasses,
"Aasimar": aasimarclasses
}

然后,您可以创建一个 function,它采用所选的比赛字符串并使用字典中正确的 class 变量返回一个随机选择。

def random_class(race):
    return random.choice(class_dict[race])

像这样

def pick(chosenrace): return random.choice({
    "Var Human" : varhumanclasses,
    "Aasimar"   : aasimarclasses,
    "Aarakocra" : aarakocraclasses,
    "Warforged" : warforgedclasses,
}.get(chosenrace, notfoundclasses))

我喜欢 @tintins7a6164 的解决方案并对其投了赞成票。 如果您不想维护字典,可以考虑下面的代码段。 它假设在全局 scope 上声明了varhumanclasses等。

import random

varhumanclasses = [1, 2, 3]
aasimarclasses = [5, 6, 7]


def get_classes_from_race(race: str):
    classes_s = race.lower().replace(" ", "") + "classes"
    if classes_s in globals():
        f = globals()[classes_s]
    else:
        raise ValueError(f"{classes_s} not found")
    if not isinstance(f, list):
        raise ValueError(f"{classes_s} is not declared as a function")
    return f


print(random.choice(get_classes_from_race("Var Human")))
print(random.choice(get_classes_from_race("Aasimar")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM