在另一个variab中使用变量

2024-05-19 16:26:16 发布

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

我要做的是让用户输入一个名称,然后程序将这个名称加上Move,然后获取一个名为*name*Move的集合。你知道吗

以下是我到目前为止的代码,以及我想在**内执行的操作:

fredMove = set(["move1","move2","move3","move4"])  #different data
joeMove = set(["move","move","move3","move4"])     #for each name
chrisMove = set(["move1","move2","move3","move4"]) #this is just
timMove = set(["move1","move2","move3","move4"])   #easier to write out
#I have many more lists, as well

name = input("What is the name you are looking for? ").lower

def moveChecking(move1,move2,move3,move4,name):
    if (move1 not in *name*Moves):
        print("Move 1 not found!")
    if (move2 not in *name*Moves):
        print("Move 2 not found!")
    if (move3 not in *name*Moves):
        print("Move 3 not found!")
    if (move4 not in *name*Moves):
        print("Move 4 not found!")

move1 = input("Enter move 1 = ")
move2 = input("Enter move 2 = ")
move3 = input("Enter move 3 = ")
move4 = input("Enter move 4 = ")

moveChecking(move1,move2,move3,move4,name)

有没有什么方法可以让我避免为每个人的名字创建moveChecking()呢?你知道吗


Tags: nameininputmoveifnotprintset
3条回答

创建移动集的字典,然后按名称访问它们

moveDict = {'fred': fredMove, 'joe':joeMove } #etc

然后在moveChecking中使用

if move1 not in moveDict[name]:
    #...

他们有很多很多丑陋的方法来做你想做的事情,就像你描述的那样(基本上是在模块级做getattr),然而这看起来更像是一个糟糕的设计案例。为什么不使用dictionary而不是将一堆集合直接分配给命名变量,用它们key作为名称,用value作为集合?例如:

moves = {'timMove':set(["move1","move2","move3","move4"]),
 ....}

然后你可以简单地把动作设置成这样:

try:
    move_set = moves[name]
except KeyError:
     # handel a bad name here

使用字典。你知道吗

moves = {
    "fred":  set(["move1","move2","move3","move4"])
    "joe":   set(["move1","move2","move3","move4"])
    "chris": set(["move1","move2","move3","move4"])
    "tim":   set(["move1","move2","move3","move4"])
}

name = input("What is the name you are looking for?")
for i in range(1, 5):
    move = input("Enter move {} = ".format(i))
    if move not in moves[name]:
        print("Move {} not found!".format(i))

相关问题 更多 >