2016-10-07 4 views
1

Я борюсь с моей программой rater password. Как я могу убедиться, что когда я вставляю пароль, моя программа возвращает силу пароля. Когда я запускаю эту программу, он говорит, что password_strength хранится на .....) является ли возвращение, которое я вызываю в конце моей программы, неправильно?Как я могу получить свою программу, чтобы вернуть силу пароля

print ("Welcome to this password rater program") 
print ("Your password needs to have a minimum of 6 characters with a maximum of 20 characters.") 
print ("Your password can contain lowercase and uppercase characters, numbers and special characters") 
print("") 


password = input("Please insert your password: ") 


def check_len(password): 
    l = len(password) 
    if 6 < l < 20: 
     x = check_char(password, l) 
    else: 
     x = 0 
    return x 


def check_char(password, l): 
    for i in range(l): 
     ascii = ord(password[i]) 
     num = 0         
     upper = 0        
     symbols = 0 
     lower = 0 
     space = 0 

     if 96 < ascii < 123:  
      lower = 15 
     elif 47 < ascii < 58:  
      num = 25 
     elif 64 < ascii < 91:  
      upper = 25 
     elif ascii == 32: 
      space = 30 
     else:        
      symbols = 25 
     total = ((lower + num + upper + space + symbols) * len(password)) 
    return total 


def password_strength(total): 
    if total >= 1000: 
     print("Your chosen password is Very strong") 
    elif 700 < total < 999: 
     print("Your chosen password is strong") 
    elif 500 < total < 699: 
     print("your chosen password is medium") 
    elif total <= 500: 
     print("Your chosen password is weak") 
    return total 


strength = check_len(password) 
print(password_strength(strength)) 
+1

Вы печатаете ссылку на эту функцию. Это должно быть 'print (password_strength (total))' где 'total' - это число, возвращаемое функцией' check_char() ' –

+1

Что такое' for i in range (l) 'this? Вы не можете получить доступ к 'l' из' check_char() ', я предлагаю вам сначала прочитать этот http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules. Вы должны называть' check_len' из 'check_char', а' password' должен быть параметром 'check_char' – Antonio

+2

Ошибки в вашем коде: 1)' check_char' не принимает никаких данных, но 'check_len' предоставляет два входа' (password, l) '2) 'check_len' ничего не возвращает 3)' check_char' не вызывается и, следовательно, ожидает, что какой-либо возврат из него не подходит. 4) Существует ошибка в вашем заявлении на печать.Я считаю, что вам нужно сделать что-то вроде 'print (password_strength (check_len (input)))' – Prasanna

ответ

3

Ну, прежде всего, вы скажете python напечатать функцию, а не оценку функции. Вот почему вы получаете это сообщение.

Кроме того, вы никогда не называете ни одной из функций, которые вы написали. Для того, чтобы получить рабочую программу после объявления всех определений является следующее:

Вызвать check_len определение:

strength = check_len(password) 

Это определение не возвращает никакого значения, хотя. Вы можете поменять его на:

def check_len(password): 
    l = len(password) 
    if 6 < l < 16: 
     x = check_char(password, l) 
    else: 
     x = 0 
    return x 

Чтобы вернуть его счет/силу.

Наконец, вы должны обработать счет, используя ваше определение «password_strength»:

password_strength(strength) 

В этой строке нет никакой необходимости печатать, потому что заявления для печати в самом определении. Если вы хотите, чтобы распечатать окончательный счет, как хорошо, хотя, вы могли бы сделать это в следующую строку:

print(password_strength(strength)) 

еще один отладочной штуковине: ваше определение check_char не принимает никаких аргументов. Вы могли бы решить эту проблему, изменив его в:

def check_char(password, l): 

Окончательный код: печать («Добро пожаловать в этот пароль программе оценщик») печати ("Ваш пароль должен иметь как минимум 6 символов максимум 16 символов. «) печать (» Ваш пароль может содержать строчные и прописные буквы, цифры и специальные символы «) печать (» ")

password = raw_input("Please insert your password: ") 


def check_len(password): 
    l = len(password) 
    if 6 < l < 16: 
     x = check_char(password, l) 
    else: 
     x = 0 
    return x 


def check_char(password, l): 
    for i in range(l): 
     ascii = ord(password[i]) 
     num = 0         
     upper = 0        
     symbols = 0 
     lower = 0 
     space = 0 

     if 96 < ascii < 123:  
      lower = 15 
     elif 47 < ascii < 58:  
      num = 25 
     elif 64 < ascii < 91:  
      upper = 25 
     elif ascii == 32: 
      space = 30 
     else:        
      symbols = 25 
     total = ((lower + num + upper + space + symbols) * len(password)) 
    return total 


def password_strength(total): 
    if total >= 1000: 
     print("Your chosen password is Very strong") 
    elif 700 < total < 999: 
     print("Your chosen password is strong") 
    elif 500 < total < 699: 
     print("your chosen password is medium") 
    elif total <= 500: 
     print("Your chosen password is weak") 
    return total 


strength = check_len(password) 
print(password_strength(strength))  ` 
+0

Я изменил функцию check_len, чтобы включить return x и скорректировал параметры check_char в (пароль, l). Я удалил заявление печати, так что я только что вернулся. но когда я запускаю программу, по-прежнему не дает мне отчета о печати для результата? что я делаю неправильно –

+0

check_len в отредактированном коде еще не возвращает x, но я предполагаю, что вы сделали это на своем компьютере. Вам все равно нужно вызвать эти функции, поставив: 'print (password_strength (strength))' в последней строке –

+0

эй michel, мой код теперь говорит, что сила не определена. это потому, что я правильно ввел его в функцию check_len? –

1

Вы никогда не называете свои функции python.

def potatis(): 
    print("Hello yu!") 

определяет функцию, но также необходимо вызвать функцию potatis() для кода внутри на самом деле работать.

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