2014-10-02 2 views
0

Я хочу сохранить исходные элементы ввода в словаре для переменной. Это, похоже, не работает, потому что информация сохраняется как строки, и я не знаю, почему. Вот пример того, что я делаю:Значения слова - это строки?

accounts = {} 

def accountcreater(): 
    accountname = raw_input("Account Name: ") 
    accountpassword = raw_input("Account Password: ") 
    accountUUID = 1 
    accountUUID += 1 
    accounts[accountname] = {"password":accountpassword,"UUID":accountUUID} 

def login(): 
    loginusername = raw_input("Account Name: ") 
    loginpassword = raw_input("Account Password: ") 
    for usernames in account: 
    if usernames == loginusername: 
     accountpassword = accounts[usernames][???] 
     accountpassword = accounts[usernames][???] 
    else: 
     pass 

Это очень простой пример того, как выглядит код. Теперь часть, где «[???]», я понятия не имею, что положить. Я попытался поставить этот код:

accountpassword = accounts[usernames][password] 
    accountpassword = accounts[usernames][UUID] 

Но это, кажется, не работает, потому что он говорит пароль и UUID не определены. Тем не менее, я, похоже, могу просто ввести [имена пользователей], и все будет хорошо. Я также попытался положить следующие файлы:

accountpassword = accounts[usernames]['password'] 
    accountpassword = accounts[usernames]['UUID'] 

Это вызывает эту ошибку: индексы строк должны быть целыми, не ул. Я не уверен, почему моя треска не сработает. Пожалуйста, помогите мне! : D Спасибо

+1

Функция 'login' имеет строку' для имен пользователей в учетной записи: '. Где определяется 'account'? Если вы хотите ввести «учетные записи», ваш второй подход [работает на моей машине] (http://ideone.com/tbKABD). Просьба представить код, демонстрирующий вашу проблему. – Kevin

+0

^Метис, это была опечатка, потому что она тоже отлично работала здесь. также, как правило, поскольку внутри 'account' есть куча имен пользователей, и вы только итерации по одному за раз« пользовательское имя »будет иметь больше смысла ........ просто говоря :) – TehTris

+1

Используйте утверждения печати для проверки каждая переменная содержит тип ожидаемого значения. Например, 'print (accounts)', 'print (accounts [usernames])' ... – unutbu

ответ

1

Причина использования словаря: избегать необходимости перебора через учетные записи. Используйте имя пользователя, введенное пользователем в качестве ключа для доступа к записи в accounts, а затем используйте буквенную строку «пароль» в качестве ключа для этой записи, чтобы получить пароль пользователя. Затем сравните это с паролем, введенным пользователем.

def login(): 
    loginusername = raw_input("Account Name: ") 
    loginpassword = raw_input("Account Password: ") 

    # We'll assume that an account exists for the entered login name 
    expected_password = accounts[loginusername]['password'] 

    if expected_password == loginpassword: 
     print "Login successful for {0}".format(loginusername) 
    else: 
     print "Password {0} incorrect for {1}".format(loginpassword, loginusername) 
0

Ваше использование «для» действительно не подходит здесь, поскольку учетные записи - это словарь, а не список.

Поскольку учетные записи - это словарь, вы хотите проверить, указано ли предоставленное имя пользователя в accounts.keys(), а затем проверьте эту запись для правильного пароля.

Так, что-то, как это будет работать:

if loginusername in accounts.keys(): 
    if accounts[loginusername]['password'] == loginpassword: 
      return 'success' 
else: 
    return 'failure' 

Теперь, если счета были список, то вам нужно, чтобы ваш цикл. Дикт позволяет вам избежать этого.

Смежные вопросы