出于某种原因,我的 python 代码跳过了代码的某个部分(pygame)

时间:2021-02-04 08:49:25

标签: python

使用 jack 登录工作正常,但即使认为 jake 存在于阵列中,我也无法使用 jake 登录。它只是跳过整个for循环“for i in storedusername”。如有帮助,将不胜感激。

代码如下:

import pygame
import sys
import random


storedusername = ["jack","jack","jack","jake","jack","jack","jack",] # The place where the username is stored
storedpass = ["abcde","abcde","abcde","12345","abcde","abcde","abcde",] # The current place where the password is stored


Login = False

def login(): # Function used to login
global Login # Global the logins fucntion
Login = False # Sets Login to false
user = input("Enter Username: ") # User enters the username that they would like to login with
print(user)
for i in storedusername: # Loops through the items in the list
    if i == user: # Compares the items in the list with the username that the user has entered
        print("user found") # If the user was found then the program will tell the user that 
        pos = int(storedusername.index(user)) # Finds the position where the username is stored
        print(pos)
    for j in range(0,10): # Has 10 tries to do this loop
        password = input("Enter Password: ") # The user enters the password which they think matches with the username.
        #for i in range(0,10):
        if password == storedpass[pos]: # Goes to the position where the password matches the username is stored and compares the values.
            print("password match username") # Program returns if the username and password match
            Login = True # Turns login to True
            return Login # Returnes Login
            break

        else:
            print("Pasword does not match try again") # If the password does not match then the program will notify it.
                

    print("too many attempts close the program") # If there are too many attempts than it will close.
else:
    print("not found") # If the username is not found than it will be promted that it is not found.
return Login # Returns login.

login()

3 个答案:

答案 0 :(得分:1)

您在外循环和内循环中都使用了变量 i,因此它在内部发生了变化。

必须是:

for i in ... :
    ...
    for j in ... :
        ...

答案 1 :(得分:0)

您可能会看到由于缩进错误而无法正常工作

    else:
        print(
            "Pasword does not match try again")  # If the password does not match then the program will notify it.

print(
    "too many attempts close the program")  # If there are too many attempts than it will close.

阻止。

请把它移到左边,应该会更好。


修改后的版本



storedusername = ["jack", "jack", "jack", "jake", "jack", "jack",
                  "jack", ]  # The place where the username is stored
storedpass = ["abcde", "abcde", "abcde", "12345", "abcde", "abcde",
              "abcde", ]  # The current place where the password is stored
(width, height) = (644, 412)

Login = False


def login():  # Function used to login
    global Login  # Global the logins fucntion
    Login = False  # Sets Login to false
    user = input(
        "Enter Username: ")  # User enters the username that they would like to login with
    print(user)
    for i in storedusername:  ############ It skips this loop
        if i == user:
            print("user found")
            pos = int(storedusername.index(user))
            print(pos)  ########### All the way up to here
        for i in range(0, 10):  # Has 10 tries to do this loop
            password = input(
                "Enter Password: ")  # The user enters the password which they think matches with the username.
            # for i in range(0,10):
            if password == storedpass[
                pos]:  # Goes to the position where the password matches the username is stored and compares the values.
                print(
                    "password match username")  # Program returns if the username and password match
                Login = True  # Turns login to True
                return Login  # Returnes Login
                break

            # --> wrong indentation
            else:
                print(
                    "Pasword does not match try again")  # If the password does not match then the program will notify it.

        print(
            "too many attempts close the program")  # If there are too many attempts than it will close.
        # <-- wrong indentation
    else:
        print(
            "not found")  # If the username is not found than it will be promted that it is not found.
    return Login  # Returns login.


# register()
login()

允许

Enter Username: jack
jack
user found
0
Enter Password: abde
Pasword does not match try again
Enter Password: abcde
password match username

Process finished with exit code 0

我不打算修改您的解决方案的流程,但我建议在行之前而不是在其中写注释。此外,您应该避免变量阴影(在不同范围内使用相同的变量,如 i)。最后一件事是您在检查密码时缩进略有错误 - 即使没有匹配的名称,它也会运行。我允许自己提出所有这些修改的版本。请看一下:

def login():
    """ Function used to login"""

    # Global the logins fucntion
    global Login
    Login = False

    # User enters the username that they would like to login with
    user = input("Enter Username: ")
    print(user)

    for stored_user_name in stored_user_names:
        if stored_user_name == user:
            print("user found")
            pos = int(stored_user_names.index(user))

            # Has 10 tries to do this loop
            for try_attempt in range(0, 10):
                # The user enters the password which they think matches with the username.
                password = input("Enter Password: ")

                # Goes to the position where the password matches the username is stored and compares the values.
                if password == storedpasswords[pos]:
                    # Program returns if the username and password match
                    print("password match username")
                    Login = True  # Turns login to True
                    return Login  # Returnss Login

                else:
                    # If the password does not match then the program will notify it.
                    print("Password does not match try again")

            # If there are too many attempts than it will close.
            print("too many attempts close the program")

    else:
        # If the username is not found than it will be promted that it is not found.
        print("not found")
    return Login

答案 2 :(得分:0)

您认为缩进不正确是正确的。与之前一样,如果您输入的用户名不在列表中,那么 storedusername 中的每个用户仍会被要求输入密码十次(总共 70 次!)。将块从 for i in range(0,10) 移动一个缩进进一步修复它。

    for i in storedusername: ############ It skips this loop
        if i == user:
            print("user found")
            pos = int(storedusername.index(user))
            print(pos) ########### All the way up to here

            # >>>> indent here
            for i in range(0,10): # Has 10 tries to do this loop
                password = input("Enter Password: ") # The user enters the password which they think matches with the username.
                #for i in range(0,10):
                if password == storedpass[pos]: # Goes to the position where the password matches the username is stored and compares the values.
                    print("password match username") # Program returns if the username and password match
                    Login = True # Turns login to True
                    return Login # Returnes Login
                    break
                else:
                    print("Pasword does not match try again") # If the password does not match then the program will notify it.
            # >>>>>

            print("too many attempts close the program") # If there are too many attempts than it will close.
        else:
            print("not found") # If the username is not found than it will be promted that it is not found.