Python - проблема с циклом for (списки)

У меня есть следующий код, который запрашивает у пользователя имя пользователя, а затем проверяет, существует ли это имя пользователя в файле json, если это так, сценарий должен побуждать пользователя максимум 3 раза ввести другое имя пользователя, в противном случае просто примите введенное имя пользователя и продолжите.

Проблема возникает, когда я пытаюсь повторно инициализировать цикл for j = test1["users"][0] чтобы во второй попытке этот скрипт проверял файл json с начала, а не с той точки, в которой он был.

Когда скрипт возвращается к циклу for после оператора else, он просто игнорирует весь цикл и переходит к следующему разделу кода без ошибок ...

Цикл for выполняет цикл в словаре, который находится в списке:

#prompt for username
x["User Name"] = input("Please type your user name: ")
i = 0

#for loop to check if the entered username already exists
for j in test1["users"]:
    while j["User Name"] != x["User Name"] and i < 3:
        break
    else:
        print("username already exists, try again")
        x["User Name"] = input("Please type a new user name: ")
        i += 1
        j = test1["users"][0]

#prompts the user for additional information if username pass `succesfully`
x["First Name"] = input("Please type your first name: ")
x["Last Name"] = input("Please type your last name: ")
x["Age"] = input("Please type your age: ")

Пример test1["users] :

{
    "users": [
        {
            "First Name": "jhon",
            "Age:": "30",
            "Last Name": "kerry",
            "User Name": "jhon",
            "Height": "170",
            "Weight": "70"
        },

Всего 2 ответа


В этом случае вы не хотите использовать break но continue .

Вот хороший учебник, в котором вы можете найти более подробные объяснения: https://docs.python.org/3/tutorial/controlflow.html?highlight=break


Ребята, спасибо за вашу поддержку, просто хотел сказать, что я решил проблему. В основном проблема была:

  • У меня есть список пользователей в формате JSON или в словаре, в конце концов, это не имеет значения.
  • Я предлагаю пользователю ввести основную информацию, а затем я добавлю информацию в файл json, если имя пользователя там еще не существует.
  • Если имя пользователя уже существует, у пользователя есть 3 дополнительные попытки ввести другое имя пользователя.
  • Сценарий должен снова проверить во всем файле, существует ли новый типизированный пользователь или нет, чтобы продолжить.

Проблема была в последнем пункте, потому что мне нужно было снова выполнить цикл for оператора for который мог бы быть в середине его работы, что могло бы привести к дублированию записей, если имя пользователя существовало в предыдущих записях.

Моей первой попыткой было попытаться перезапустить цикл for с помощью этого оператора j = test1["users"][0] чтобы цикл начался заново, но этот цикл не сработал. В конце концов, решение, которое я нашел, заключается в использовании дополнительного цикла, который заставляет цикл for перезапускаться. Если вы используете некоторое while и boolean переменную, проблема будет решена !! :)

Это окончательный код:

x["User Name"] = input("Please type your user name: ")
#initializing variables that restart for loop and restrict username input to 3
    i = True
    n = 0
#additional while loop to restart for loop
    while i and n <= 3:
        i = False
        if n == 3:
            print("Thank you")
            exit()
#looping a list in a diciontary
        for j in test1["users"]:
            while j["User Name"] != x["User Name"]:
                break
#telling the user the username already exists and prompting for new username
            else:
                print("existing user")
                x["User Name"] = input("Type new user name")
                n += 1
                i = True
                break
x["First Name"] = input("Please type your first name: ")
x["Last Name"] = input("Please type your last name: ")

Спасибо всем!!


Есть идеи?

10000