如何将 if 和 elif 与随机选择命令一起使用?
How do I use the if and elif with a random choice command?
我正在尝试创建一个程序来在 NHL 视频游戏中生成一个完整的随机构建。本质上你得到了一个原型,从那个原型你得到了某些能力等等,我试图让第一部分 运行 只是选择一个原型和一个构建。我还需要实现一种方法来进行身高、体重和提升,但我无法让程序根据所选的原型来选择能力。这是我到目前为止的代码,我知道它很多,我不知道这是否是做这样的事情的最简单方法,因为我必须为构建的其他区域制作更多 if/elif 循环,除非有是一种更简单更有效的方法:
import random
allbuilds = ["two way forward", "power forward", "dangler", "sniper", "enforcer", "enforcer d"]
twfabils= ["truculence", "back at ya", "big rig"]
pwfabils= ["shutdown", "quick pick", "schnipe"]
dangabils= ["ankle breaker", "one tee", "puck on string"]
snipabils= ["one tee", "snappy", "schnipe"]
enfabils= ["heatseeker", "elite edges", "medic"]
enfdabils= ["unstoppable force", "stick em up", "ice pack"]
pickrandbuild=random.choice(allbuilds)
randbuild=print(pickrandbuild)
picktwfabil=random.choice(twfabils)
pickpwfabil=random.choice(pwfabils)
pickdangabil=random.choice(dangabils)
picksnipabil=random.choice(snipabils)
pickenfabil=random.choice(enfabils)
pickenfdabil=random.choice(enfdabils)
if randbuild == "two way forward":
print(picktwfabil)
elif randbuild == "power forward":
print(pickpwfabil)
elif randbuild == "dangler":
print(pickdangabil)
elif randbuild == "sniper":
print(picksnipabil)
elif randbuild == "enforcer":
print(pickenfabil)
else:
print(pickenfdabil)
如果将数据格式化为字典,则可以将编码减少到两行:
allbuilds = {
"two way forward": ["truculence", "back at ya", "big rig"],
"power forward": ["shutdown", "quick pick", "schnipe"],
"dangler": ["ankle breaker", "one tee", "puck on string"],
"sniper": ["one tee", "snappy", "schnipe"],
"enforcer": ["heatseeker", "elite edges", "medic"],
"enforcer d": ["unstoppable force", "stick em up", "ice pack"]
}
pickrandbuild = random.choice(list(allbuilds.keys()))
pickability = random.choice(allbuilds[pickrandbuild])
而且,正如对此答案的评论中所建议的那样,甚至可以使用元组拆包将其减少到一行:
pickrandbuild, pickability = random.choice(list(allbuilds.items()))
我正在尝试创建一个程序来在 NHL 视频游戏中生成一个完整的随机构建。本质上你得到了一个原型,从那个原型你得到了某些能力等等,我试图让第一部分 运行 只是选择一个原型和一个构建。我还需要实现一种方法来进行身高、体重和提升,但我无法让程序根据所选的原型来选择能力。这是我到目前为止的代码,我知道它很多,我不知道这是否是做这样的事情的最简单方法,因为我必须为构建的其他区域制作更多 if/elif 循环,除非有是一种更简单更有效的方法:
import random
allbuilds = ["two way forward", "power forward", "dangler", "sniper", "enforcer", "enforcer d"]
twfabils= ["truculence", "back at ya", "big rig"]
pwfabils= ["shutdown", "quick pick", "schnipe"]
dangabils= ["ankle breaker", "one tee", "puck on string"]
snipabils= ["one tee", "snappy", "schnipe"]
enfabils= ["heatseeker", "elite edges", "medic"]
enfdabils= ["unstoppable force", "stick em up", "ice pack"]
pickrandbuild=random.choice(allbuilds)
randbuild=print(pickrandbuild)
picktwfabil=random.choice(twfabils)
pickpwfabil=random.choice(pwfabils)
pickdangabil=random.choice(dangabils)
picksnipabil=random.choice(snipabils)
pickenfabil=random.choice(enfabils)
pickenfdabil=random.choice(enfdabils)
if randbuild == "two way forward":
print(picktwfabil)
elif randbuild == "power forward":
print(pickpwfabil)
elif randbuild == "dangler":
print(pickdangabil)
elif randbuild == "sniper":
print(picksnipabil)
elif randbuild == "enforcer":
print(pickenfabil)
else:
print(pickenfdabil)
如果将数据格式化为字典,则可以将编码减少到两行:
allbuilds = {
"two way forward": ["truculence", "back at ya", "big rig"],
"power forward": ["shutdown", "quick pick", "schnipe"],
"dangler": ["ankle breaker", "one tee", "puck on string"],
"sniper": ["one tee", "snappy", "schnipe"],
"enforcer": ["heatseeker", "elite edges", "medic"],
"enforcer d": ["unstoppable force", "stick em up", "ice pack"]
}
pickrandbuild = random.choice(list(allbuilds.keys()))
pickability = random.choice(allbuilds[pickrandbuild])
而且,正如对此答案的评论中所建议的那样,甚至可以使用元组拆包将其减少到一行:
pickrandbuild, pickability = random.choice(list(allbuilds.items()))