Почему оператор ELSE выполняется перед оператором IF? - PullRequest
0 голосов
/ 29 января 2020

когда я пытаюсь проверить, есть ли значение в моем списке JSON, оператор else выполняется перед моим оператором IF.

так что если я напишу имя: MartinDufour программа скажет мне НЕТ, а затем скажет ДА. Что не нормально .. (см. Короткую программу ниже, чтобы понять)

import json

with open("user.json") as k:
    data = json.load(k)


def addlb():
    for i in data["person"]:
        if i["Name"] == name:
            print("Yes")
            break
        else:
            print("No")



print("Write the Name:")
name = input()

addlb()

пользователь. json

{
  "person": [
    {
      "Name": "Peter",
      "Number": "5143324232"
    },
    {
      "Name": "MartinDufour",
      "Number": "5147745840"
    },
    {
      "Name": "OlivierDeschamps",
      "Number": "5145544029"
    },
    {
      "Name": "DenisCodere",
      "Number": "5143324242"
    }
  ]
}

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Вы также можете использовать встроенную функцию any, которая возвращает True, если какое-либо из условий возвращает True, в противном случае возвращается False.

import json

with open("user.json") as k:
    data = json.load(k)

def addlb(name):

    found = any(n['Name'] == name for n in data['person'])
    print('Yes' if found else 'No')   


print("Write the Name:")
name = input()

addlb(name)
1 голос
/ 29 января 2020

Вы можете сделать что-то вроде этого

import json

with open("user.json") as k:
    data = json.load(k)


def addlb():
    found_name=False
    for i in data["person"]:
        if i["Name"] == name:
            found_name=True
            break
    if found_name:
        print("Yes")
    else:
        print("No")




print("Write the Name:")
name = input()

addlb()

То, что вы делаете здесь, это замечание, если вы нашли имя с помощью переменной found_name. Если вы никогда не найдете его, found_name останется ложным. Если он когда-либо найдет его, он будет установлен в true.

...