0

通信する別々のスクリプトから2つの機能があります。値が存在する場合、変数を %username% に設定する必要があります。値が存在しない場合は、「なし」に設定する必要があります。変数が none に設定されている場合、関数は続行され、新しいアカウントが作成されます。変数がユーザー名に設定されている場合、関数は続行する必要があります。では、一貫性のない不規則な結果が得られるのはなぜでしょうか?

次の関数は、含まれていない他の関数を呼び出すため、実行されません。

def database_get_user_details(user_database, username, detail):
    value = "None"
    rows = ((users_db_curs.execute("SELECT * FROM '" + user_database + "' WHERE username='" + username + "'"))).fetchall()
    for row in rows:
        if rows:
            if detail   == ("userID")     : value = str(row[1])
            elif detail == ("username")   : value = str(row[2])
            elif detail == ("password")   : value = str(row[3])
            elif detail == ("creator_exp"): value = str(row[4])
            else                          : value = "None"
        else:
            value = "None"
    return value

def game_register(username_table_name):
    while True:
        while True:
            user_ID = raw_input("E-mail address: ")
            if user_ID != "":
                break
        while True:
            username = raw_input("Username      : ")
            if username != "":
                break
        while True:
            password = raw_input("Password      : ")
            if password != "":
                password = password.encode("hex")
                break
        usr = database_get_user_details(username_table_name, username, "username")
        print usr
        if (usr != "None") or (usr != None):
            print usr
            print "Username already taken!"
            pause()
        else:
            database_create_user(username_table_name, user_ID, username, password, "250")
            print "Successfully created %s with password: %s" %(username, password.decode("hex"))
            pause()
            break

セキュリティのために実際のパスワード暗号化アルゴリズムを含めていないことに注意してください。この例では、16 進数にエンコードするように設定しただけです。

追記:説明忘れ

あたかも random.choice() を呼び出しているかのように、関数が新しいユーザーを作成するかどうか、またはユーザー名が既に使用されていることを通知するかどうかに関連する一貫性を見つけることができません。

4

1 に答える 1

0

不等式の少なくとも 1 つが true になるため、既存のユーザーのコードは常にトリガーされます。

if (usr != "None") or (usr != None):
        print usr
        print "Username already taken!"
        pause()

条件は

if (usr != "None") and (usr != None):
于 2012-05-06T04:29:18.693 に答える