do czego służy property?

0

Szanowni Forumowicze , przerobiłem trochę kod akinatora, z internetu, ale nie za bardzo rozumiem działanie w definicji wartości PROPERTY. Jak dobrze rozumiem property przyjmuje wartości value ze słownika. Czy ktoś mógłby i wytłumaczyć jak ją zrozumieć albo podesłać linka gdzie moge o niej poczytać. z góry dzuiękuję

bazadanych = [
    {"imię":"Paweł Stelmach", "człowiek":True, "zwierzak":False, "bogaty": False, "znany": False, "Polak": True, "wąsy": False, "włosy":False,
     "mądry":False, "nauczyciel": True, "malarz": False, "piłkarz": False , "polityk": False,"żyje":True, "zły":False, "żołnierz": False},

    {"imię":"Józef Poniatowski", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": True, "wąsy": True, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":False, "zły":False, "żołnierz": True},

    {"imię":"Jan Matejko", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": True,  "wąsy": True, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": True, "piłkarz": False , "polityk": False,"żyje":False, "zły":False, "żołnierz": False},
    
    {"imię":"Robert Lewandowski", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": True,  "wąsy": False, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": False, "piłkarz": True , "polityk": False,"żyje":True, "zły":False, "żołnierz": False},

    {"imię":"Donald Trump", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": False, "wąsy": False, "włosy":True, 
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":True, "zły":True, "żołnierz": False},

    {"imię":"Shrek", "człowiek":False, "zwierzak":False, "bogaty": False, "znany": True, "Polak": False,  "wąsy": False, "włosy":False,
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": False,"żyje":False, "zły":False, "żołnierz": False},

    {"imię":"Pies Szarik", "człowiek":False, "zwierzak":True, "bogaty": False, "znany": True, "Polak": True,  "wąsy": False, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": False,"żyje":False, "zły":False, "żołnierz": True},

    {"imię":"Komar", "człowiek":False, "zwierzak":True, "bogaty": False, "znany": False, "Polak": True,  "wąsy": False, "włosy":False,
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": False,"żyje":True, "zły":True, "żołnierz": False},

    {"imię":"Adolf Hitler", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": False,  "wąsy": True, "włosy":True,
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":False, "zły":True, "żołnierz": True},

    {"imię":"Józef Stalin", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": False,  "wąsy": True, "włosy":True,
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":False, "zły":True, "żołnierz": False},

    {"imię":"Benito Mussolini", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": False,  "wąsy": False, "włosy":False,
     "mądry":False, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":False, "zły":True, "żołnierz": True},

    {"imię":"Napoleon Bonaparte", "człowiek":True, "zwierzak":False, "bogaty": True, "znany": True, "Polak": False,  "wąsy": False, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": True,"żyje":False, "zły":False, "żołnierz": True},

    {"imię":"Mikołaj Kopernik", "człowiek":True, "zwierzak":False, "bogaty": False, "znany": True, "Polak": True,  "wąsy": False, "włosy":True,
     "mądry":True, "nauczyciel": False, "malarz": False, "piłkarz": False , "polityk": False,"żyje":False, "zły":False, "żołnierz": False},
]

def zgaduj(answer, property):
    if answer == "t":
        odp = True
    else:
        odp = False

    do_usuniecia=[]
    for x in bazadanych:
        if x[property] != odp:
            do_usuniecia.append(x)

    for y in do_usuniecia:
        bazadanych.remove(y)

    if len(bazadanych) == 1:
        print("Twoja postać to "+bazadanych[0]["imię"])
        quit()


odp = input("Czy Twoja postać jest człowiekiem?(t,n)")
zgaduj(odp, "człowiek")

odp = input("Czy Twoja postać jest zwierzakiem?(t,n)")
zgaduj(odp, "zwierzak")

odp = input("Czy Twoja postać jest bogata?(t,n)")
zgaduj(odp,"bogaty")

odp = input("Czy Twoja postać jest znana?(t,n)")
zgaduj(odp,"znany")

odp = input("Czy Twoja postać jest Polakiem?(t,n)")
zgaduj(odp,"Polak")

odp = input("Czy Twoja postać ma wąsy?(t,n)")
zgaduj(odp,"wąsy")

odp = input("Czy Twoja postać ma włosy?(t,n)")
zgaduj(odp,"włosy")

odp = input("Czy Twoja postać jest mądra?(t,n)")
zgaduj(odp,"mądry")

odp = input("Czy Twoja postać jest nauczycielem?(t,n)")
zgaduj(odp,"nauczyciel")

odp = input("Czy Twoja postać jest piłkarzem?(t,n)")
zgaduj(odp,"piłkarz")

odp = input("Czy Twoja postać jest malarzem?(t,n)")
zgaduj(odp,"malarz")

odp = input("Czy Twoja postać jest politykiem?(t,n)")
zgaduj(odp,"polityk")

odp = input("Czy Twoja postać żyje?(t,n)")
zgaduj(odp,"żyje")

odp = input("Czy Twoja postać jest zła?(t,n)")
zgaduj(odp,"zły")

odp = input("Czy Twoja postać jest żołnierzem?(t,n)")
zgaduj(odp,"żołnierz")
1

Nie rozumiem prawie w ogóle tego pytania, napisz jeszcze raz składniej, albo na jakimś przykładzie najlepiej, o co chodzi.

for x in bazadanych:
    if x[property] 

To twoje "property" to jest klucz w słowniku, który w rezultacie da ci przypisaną do niego wartość.
Mając słownik 'data':

{"imie" : "abc", "wiek": 20}

i wpisując data["imie"] otrzymasz "abc".

1
stelcio napisał(a):

Szanowni Forumowicze , przerobiłem trochę kod akinatora, z internetu, ale nie za bardzo rozumiem działanie w definicji wartości PROPERTY. Jak dobrze rozumiem property przyjmuje wartości value ze słownika. Czy ktoś mógłby i wytłumaczyć jak ją zrozumieć albo podesłać linka gdzie moge o niej poczytać. z góry dzuiękuję

No w tym konkretnym przykładzie, zmienna property przechowuje aktualną sprawdzaną cechę, np. "wąsy", "włosy", "mądry", "nauczyciel", po to żeby ją później przypisać do wpisu w słowniku, np "wąsy": False, "włosy": False, "mądry": False, "nauczyciel": False,.

I w Twoim przykładzie property to bardziej argument/parametr niż zmienna. Możesz o nich poczytać tutaj: https://technikinformatyk.pl/kursy/kurs/python/lekcja/python-funkcje-parametry-wejsciowe-i-wyjsciowe/

0

Zwykły argument (ma służyć jako klucz do wywołania ze słownika) funkcji. Równie dobrze, można go nazwać dupa :PPP Po tytule myślałem, że pytanie będzie o setery i getery :D

0

Dziękuję za odpowiedzi, już zrozumiałem.
Temat zamknięty, pozdrawiam

0

Kilka uwag do samego kodu ...

  1. w bazie danych możesz przechowywać wyłącznie wartości z True i sprawdzać czy property w ogóle istnieje czy nie, wpisy będą krótsze i czytelniejsze.
    if answer == "t":
        odp = True
    else:
        odp = False

Za to się powinno ludzi z pracy zwalniać :P
3. tablicę do_usuniecia można pominąć, jeśli elementy tablicy będziesz analizował i usuwał od końca.
4. Na pytania też można utworzyć tablicę i poruszać się w niej w pętli. Fragmenty pytania "Czy Twoja postać " i "?(t,n)" są wspólne dla każdego pytania, możesz przerobić kod tak by były w jednym miejscu.

więc, mi wyszło coś takiego:

bazadanych = [
    {
        "imię": "Paweł Stelmach",
        "człowiek": True,
        "Polak": True,
        "nauczyciel": True,
        "żyje": True,
    },
    {
        "imię": "Józef Poniatowski",
        "człowiek": True,
        "bogaty": True, 
        "znany": True, 
        "Polak": True, 
        "wąsy": True, 
        "włosy": True,
        "mądry": True,
        "polityk": True,
        "żołnierz": True,
    },
    {
        "imię": "Jan Matejko",
        "człowiek": True, 
        "bogaty": True, 
        "znany": True, 
        "Polak": True,  
        "wąsy": True, 
        "włosy": True,
        "mądry": True, 
        "malarz": True, 
    },
    {
        "imię": "Robert Lewandowski", 
        "człowiek": True, 
        "bogaty": True, 
        "znany": True, 
        "Polak": True,  
        "włosy": True,
        "mądry": True, 
        "piłkarz": True , 
        "żyje": True,
    },
    {
        "imię": "Donald Trump", 
        "człowiek":True, 
        "bogaty": True, 
        "znany": True, 
        "włosy":True, 
        "polityk": True,
        "żyje": True, 
        "zły":True,
    },
    {
        "imię": "Shrek", 
        "znany": True, 
    },
    {
        "imię":"Pies Szarik",
        "zwierzak": True, 
        "znany": True, 
        "Polak": True,  
        "włosy": True,
        "mądry": True, 
        "żołnierz": True,
    },
    {
        "imię":"Komar", 
        "zwierzak": True, 
        "Polak": True,  
        "żyje": True, 
        "zły": True,
    },
    {
        "imię": "Adolf Hitler", 
        "człowiek":True, 
        "bogaty": True, 
        "znany": True, 
        "wąsy": True, 
        "włosy":True,
        "polityk": True,
        "zły":True, 
        "żołnierz": True,
    },
    {
        "imię":"Józef Stalin", 
        "człowiek": True, 
        "bogaty": True, 
        "znany": True, 
        "wąsy": True, 
        "włosy":True,
        "polityk": True,
        "zły":True,
    },
    {
        "imię": "Benito Mussolini", 
        "człowiek":True, 
        "bogaty": True, 
        "znany": True, 
        "polityk": True,
        "zły":True,
        "żołnierz": True,
    },
    {
        "imię": "Napoleon Bonaparte", 
        "człowiek":True, 
        "bogaty": True, 
        "znany": True, 
        "włosy":True,
        "mądry":True, 
        "polityk": True,
        "żołnierz": True,
    },
    {
        "imię":"Mikołaj Kopernik", 
        "człowiek": True, 
        "znany": True, 
        "Polak": True,  
        "włosy":True,
        "mądry":True,
    },
]

pytania = [
    {"q": "jest człowiekiem", "p": "człowiek"},
    {"q": "jest zwierzakiem", "p": "zwierzak"},
    {"q": "jest bogata", "p": "bogaty"},
    {"q": "jest znana", "p": "znany"},
    {"q": "jest Polakiem", "p": "Polak"},
    {"q": "ma wąsy", "p": "wąsy"},
    {"q": "ma włosy", "p": "włosy"},
    {"q": "jest mądra", "p": "mądry"},
    {"q": "jest nauczycielem", "p": "nauczyciel"},
    {"q": "jest piłkarzem", "p": "piłkarz"},
    {"q": "jest malarzem", "p": "malarz"},
    {"q": "jest politykiem", "p": "polityk"},
    {"q": "żyje", "p": "żyje"},    
    {"q": "jest zła", "p": "zły"},
    {"q": "jest żołnierzem", "p": "żołnierz"},
]

def zgaduj(answer, property):
    odp = answer == "t"
    
    for idx in reversed(range(len(bazadanych))):
        if odp != (property in bazadanych[idx]):
            del bazadanych[idx]

    if len(bazadanych) == 1:
        print("Twoja postać to " + bazadanych[0]["imię"])
        quit()
    elif len(bazadanych) == 0:
        print("Nie znam takiej postaci!")
        quit()
    
def pytaj(pytanie):
    odp = input(f"Czy Twoja postać {pytanie['q']}?(t,n) ")
    zgaduj(odp, pytanie["p"])

for pytanie in pytania:
    pytaj(pytanie)

Cechy mogą być np. tablicą stringów tak naprawdę. Brakuje mi tu jakichś powiązań między pytaniami. Jak ktoś jest człowiekiem to raczej nie będzie zwierzęciem, ale mogę się mylić :P Przydałaby się też jakaś weryfikacja czy każdy z przypadków ma unikalny zestaw cech.

1 użytkowników online, w tym zalogowanych: 0, gości: 1