2016-02-07 2 views
-2

Я новичок в python и stackoverflow, поэтому извиняюсь, если не знаю многого. Недавно я взял Python и начал с него. Я пытаюсь сделать логин для администратора, но, похоже, я получаю сообщение об ошибке. Я попытался с помощью для заявления, но я, кажется, получаю ошибку: TypeError: «ул» объект не вызываемая Вот мой код ...Ошибка Python: TypeError: объект 'str' не является вызываемым

username = input("Please enter your username: ") 
for name in username (3): 
    if username == 'admin': 
     break 
    else: 
     print("You've given incorrect credentials thrice.") 
     import sys 
     sys.exit("Exiting...") 
while True: 
    password = input("Please enter your password: ") 
    if password == 'KhS9': 
     break 

print("Welcome admin!") 

Любая помощь по этому вопросу?

EDIT

Извинения, если я не был понятнее, я пытался, чтобы попытаться сделать что-то, в котором вам нужно ввести. Для цикла была использована, чтобы попытаться получить предложение «Пожалуйста, введите ваше имя пользователя «повторить 3 раза, затем показать с предложением« Вы указали неверные учетные данные 3 раза », если вход не соответствует тому, что я его установил (я установил его как« admin »)

+1

Что вы ожидаете от этой части? 'для имени в имени пользователя (3)' – Riaz

+1

'username' - это строка. 'username (3)' пытается вызвать его как функцию с аргументом 3. Это ошибка. Кроме того, почему у вас есть цикл 'for'? У вас есть одно имя, поэтому вам не нужно пытаться его пропустить. –

ответ

1

Well , что это?

for name in username (3): 

Username является строкой, а не функция.

Если вы хотите три первые буквы, просто сделать

имя пользователя = имя пользователя [3]

И сценарий:

username = input("Please enter your username: ")[5] 
if username == 'admin': 
    break 
else: 
    print("You've given incorrect credentials thrice.") 
    import sys 
    sys.exit("Exiting...") 

while True: 
    password = input("Please enter your password: ") 
    if password == 'KhS9': 
     break 

print("Welcome admin!") 
0

Я думаю, что вы хотите

for i in range(3): 
    #some code 

Это означает, что любой код, помещенный где некоторый код будет выполняться три раза. Однако ваш оператор else будет оценивать значение true и, таким образом, разорвет цикл на первом запуске. Это означает, что вам нужно каким-то образом изменить его - добавьте переменную счетчика.

Рассмотрите, что ваш цикл while True будет работать до тех пор, пока не будет введен правильный пароль. Небезопасный?

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

0

Вот пример того, как вы правильно реализуете эту идею: admin_name = 'abc' # Имя пользователя по умолчанию (unencrypted = insecure). admin_pass = 'cde' # Пароль по умолчанию (незашифрованный = небезопасный).

max_attempts = 3  # Maximum number of times a user can try. 
attempt = 0   # Initial condition when the programme is launched. 

# Hereby, we'll take invalid attempts as an error, but instead of breaking the 
# programme, we will later handle (via "exceptions" the error, and issue 
# additional guidance. 
try: 

    # This is an event loop. It will run for as long as the condition set is true. 
    while attempt < max_attempts: 

     uname = input('Username: ') # User is directed to enter the username. 
     password = input('pass: ') # User is directed to enter the password. 

     # Values entered by the user are validated. 
     if uname == admin_name and password == admin_pass: 
      # If the entries are valid, the event loop is broken, and anything 
      # written afterwards (after the exceptions) will now be executed, 
      # unless directed otherwise (e.g. a certain function is called) 
      # before the "break". 
      print('Welcome Admin') 
      break 

     else: 
      # If the entries are invalid, but the maximum number of attempts 
      # are not reached, one is added to the attempts, followed by a 
      # warning. "continue" means that the rest of the loop is no longer 
      # executed, and the event loop automatically moves onto the 
      # forthcoming loop immediately. This is not essential here, but I 
      # put it in case something else is added to the event loop. 
      attempt += 1 

      if attempt == max_attempts: 
       # if the maximum number of attempts are reached in this loop, a 
       # warning is displayed, and the next cycle would not be run 
       # automatically. It is best to terminate the programme afterwards, 
       # so the following code wouldn't run. 
       raise RuntimeError("\nYou've reached the maximum number of attempts allowed.") 

      else: 
       print('Wrong credentials.\n Try again or press <ctrl+c> to exit.\n') 
       continue 


except KeyboardInterrupt: 
    # "KeyboardInterrupt" is a special exception raised only when the 
    # programme is broken out of using <ctrl+c>. In that case, this piece of 
    # code is run. 
    print('Terminated by the user.\nGood-bye.') 

except RuntimeError as e: 
    # This is handling of the errors raised above. The value of "e" is equal 
    # the value given to the relevant function (RuntimeError in this case) 
    # when it was raised. 
    print(e) 

Не стоит забывать, что это небезопасный способ хранения пароля администратора. Возможно, воспользуйтесь модулем crypt Python для шифрования пароля?

+0

Как я уже говорил ранее, я довольно новичок в python, и я все еще участвую. Что такое модули в python и как я могу использовать этот модуль 'crypt'? –

+0

Модули - это классы (или иногда функции, поскольку вы, возможно, не знаете, что это такое, если вы не видите код), которые существуют в библиотеках.Подробнее о шифровании в Python вы можете прочитать здесь: [https://docs.python.org/3.5/library/crypto.html]. Кроме того, если этот или любой другой ответ отвечает на ваш вопрос, отметьте его как таковой, чтобы поток был закрыт, и вопрос был отмечен как ответ на доске. Или идти вперед и спрашивать больше! :) – Pouria

+0

Не могли бы вы привести пример того, как я мог бы использовать модуль 'crypt' на моей части кода? –

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