2014-10-16 7 views
0

То, что я пытаюсь сделать, это сделать так, чтобы пользователь вводил имя, которое программа затем принимает, добавляет к нему слово 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() для имени каждого человека?

+0

Вы могли бы сделать словарь с именем в качестве ключа и набора в качестве значения. –

+0

Я видел это, но думал, что у меня другая проблема, но благодаря ответам здесь я смог понять фактический ответ на мою проблему. – xdflames

ответ

2

Используйте словарь.

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)) 
1

Создать словарь множеств хода, то доступ к ним по имени

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

, а затем в moveChecking использования

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

Они много, много некрасивых способов сделать то, что вы хотите, как вы его описали (по существу делаете getattr на уровне модуля), однако это похоже на случай плохого дизайна. Вместо того, чтобы иметь набор наборов, назначенных непосредственно именованным переменным, почему бы не использовать dictionary вместо этого, с ними key как имя и value как набор? EX:

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

И тогда вы можете просто получить движение установить, как так:

try: 
    move_set = moves[name] 
except KeyError: 
    # handel a bad name here 
Смежные вопросы