0

これらは私の2つのdef関数です:

def valid_username(username):
     # implement the function here


    while True:

        try:
            username = input("Username: ")


            if len(username) < 8:
                print ("Sorry, the username must be at least 8 characters long.")


            if username.isalnum() == False:
                print ("Sorry, your name can only contain alpha numeric characters")


            numupper = 0


            for c in username:

                if c.isupper() == True:
                    numupper += 1

            if numupper > 0:
                print ("You have at least 1 uppercase in this username.")

            else:
                print ("You have no uppercase in this username.")

            numlower = 0

            for d in username:

                if d.islower() == True:
                    numlower +=1
            if numlower > 0:
                print ("You have at least 1 lowercase in this username.")

            else:
                print ("You have no lowercase in this username.")


            numdigit = 0

            for e in username:

                if e.isdigit() == True:
                    numdigit += 1
            if numdigit > 0:
                print ("You have at least one digit in this username.")

            else:
                print("You have no digits in this username.")

                continue

        except:
            print ("Sorry, not valid. Try again.")
        else:
            print ("Thank you for your input")
            break


def valid_password(password, username):
    # implement the function here

    while True:

        try:
            password = input("Password: ")

            if username in password:
                print ("That's not secure at all.")



            if len(password) < 8:
                print ("Sorry, the password must be at least 8 characters long.")


            if password.isalnum() == False:
                print ("Sorry, your password can only contain alpha numeric characters")


            numupper = 0


            for c in password:

                if c.isupper() == True:
                    numupper += 1

            if numupper > 0:
                print ("You have at least 1 uppercase in this password.")

            else:
                print ("You have no uppercase in this password.")

            numlower = 0

            for d in password:

                if d.islower() == True:
                    numlower +=1
            if numlower > 0:
                print ("You have at least 1 lowercase in this password.")

            else:
                print ("You have no lowercase in this password.")


            numdigit = 0

            for e in password:

                if e.isdigit() == True:
                    numdigit += 1
            if numdigit > 0:
                print ("You have at least one digit in this password.")

            else:
                print("You have no digits in this password.")

                continue

        except:
            print ("Sorry, not valid. Try again.")
        else:
            print ("Thank you for your input")
            break

私の主なプログラムはこれです:

username = input("Username: ")


result, reason = uservalidation.valid_username(username)


if not(result):
    print (reason)


else:

    password = input("Password: ")


    pwresult, pwreason = uservalidation.valid_password(password, username)


    if not(pwresult):
        print (pwreason)
    else:
        print ("Username and Password combination is valid!")

実行すると、次のようになります。

Username: d
Username: user
Sorry, the username must be at least 8 characters long.
You have no uppercase in this username.
You have at least 1 lowercase in this username.
You have no digits in this username.
Username: craig2345
You have no uppercase in this username.
You have at least 1 lowercase in this username.
You have at least one digit in this username.
Thank you for your input
Traceback (most recent call last):
  File "C:/Users/Si Hong/Desktop/pythontest/HuangSiHong_Assign8_part3.py", line 7, in <module>
    result, reason = uservalidation.valid_username(username)
TypeError: 'NoneType' object is not iterable
>>> 

usernameの最初の値を入力すると、関数がトリガーされないのに、2回目に入力した後にトリガーされる理由がわかりません。また、nonetypeを解決する方法がわかりません。エラーの問題、誰かが私にこれを説明することができれば、それは素晴らしいことです、どうもありがとうございました!

4

2 に答える 2

0

関数に明示的に返される値がない場合は、暗黙的にを返しますNone。これは、この方法でタプルをアンパックする場合には適用できません。

于 2012-12-06T03:44:12.013 に答える
0

プロンプトが2回表示される理由Username:は、メインプログラムで1回入力を求め、次に関数内ですぐにもう一度入力を求めるためです。この関数は、ユーザーに入力を要求するべきではありません。渡された引数からusernameの値を取得します。

NoneTypeに関するエラーが表示される理由(あなたが書いたようにnonetypeではなく、Pythonは大文字と小文字を区別し、実際にそれが言うことを正確に入力する習慣を身につける必要があります)は、関数valid_password()がreturnステートメントで終了するためですプログラムで期待される2つの値を返します。実際、returnステートメントはまったくありません。つまり、特別なPython値None(NoneType型のオブジェクト)を効果的に返します。

関数が返すものから2つの値を抽出するようにプログラムに指示するため、返された値を反復処理することによって抽出しようとします。NoneTypeは、(情報が含まれていないため)繰り返すことができるタイプの1つではないため、エラーメッセージが表示されます。

于 2012-12-06T03:53:52.287 に答える