Wątek przeniesiony 2019-01-19 00:41 z Edukacja przez somekind.

Python dla każdego - zadania.

Odpowiedz Nowy wątek
2019-01-18 21:04
1

Cześć wszystkim,

Jestem na etapie zmiany kierunku swojej kariery, a ponadto jest to mój pierwszy wpis na forum zatem proszę o wyrozumiałość jeśli palnę jakieś banalne czy wręcz śmieszne pytanie.

Jestem na etapie nauki Python'a i pod rękę wpadła mi książka z tytułu tego posta "Python dla każdego". Po każdym rozdziale autor przedstawia kilka zadań, dzięki którym można pobawić się kodem i zmajstrować coś bazując na wcześniej poznanych regułach, funkcjach itp. Wprawdzie w sieci można wybiórczo znaleźć odpowiedzi na wybrane pytania, ale w związku z tym, że przerabiam tą książke od samego początku to pozwoliłem sobie uruchomić taki temat, gdzie będę wrzucał swoje "rozwiązania" tych zadań. Kod zapewne nie jest pierwszej jakości, ponieważ samym językiem zacząłem się głębiej interesować od tygodnia lub dwóch, ale już coś tam potrafię naskrobać.

Jeśli to możliwe, to bardzo proszę tych bardziej doświadczonych programistów o wsparcie i ewentualne porady co do jakości kodu, zmian w nim lub po prostu czy widzą jakiś totalny fakap w danym rozwiązaniu. Oczywiście pozostałych forumowiczów też zachęcam do dyskusji, a jeśli ktoś z was jest na etapie rozwiązywania tych zadań - o wrzucanie swoich rozwiązań w tym temacie.

Rozdział 4, zadanie nr 4
Utwórz grę, w której komputer wybiera losowo słowo, które gracz musi odgadnąć. Komputer informuje gracza, ile liter znajduje się w wybranym słowie. Następnie gracz otrzymuje pięć szans na zadanie pytania, czy jakaś litera jest zawarta w tym słowie. Komputer może odpowiedzieć tylko „tak” lub „nie”. Potem gracz musi odgadnąć słowo.

#Gra, w której komputer wybiera losowe słowo, a gracz musi je odgadnąć

import random

#Najpierw tworzę krotkę z zestawieniem słów
words = ("karuzela", "autostrada", "pałac", "miasto", "doniczka", "pielucha", "bank", "stolica", "lodówka")

#Następnie komputer losuje z zestawu słów jedno
word = random.choice(words)

#Przypisuję zmienne
correct = word
tries = 0

#Rozpoczynamy grę
print("\t\tWitaj w grze 'Słowny Mix'!")
print("Wybrałem dla Ciebie pewne słowo, a Twoim zadaniem będzie je odgadnąć.")
print("Możesz skorzystać z 5 szans i spytać mnie, czy dana litera zawiera się w słowie.")
print("\nPodpowiem tylko, że słowo ma następującą ilość liter: ", len(correct))

choice1 = input("\nSpróbujesz odgadnąć słowo już teraz? tak/nie ")

while choice1 == "nie" and tries<5:
    litera = input("\nWpisz literę, a ja odpowiem, czy zawiera się ona w tym słowie: ")
    if litera in correct:
        print("\nTak, litera", litera, "znajduje się w tym słowie.")
    else:
        print("\nNie, litera", litera, "nie znajduje się w tym słowie.")
    choice2 = input("\nCzy chcesz spytać o kolejną literę?")
    if choice2 == "tak" and tries <5:
        tries += 1
    else:
        break
    if tries > 4:
        input("\nPrzykro mi, wykorzystałeś(aś) już wszystkie 5 prób podpowiedzi. Musisz odpowiedzieć. Co to za słowo? ")

answer = input("\nA więc co to za słowo? ")
if answer == correct:
    print("\n\nGratulacje! Udało Ci się odpowiedzieć po", tries, "podpowiedziach!")

print("\n\nTo nie to słowo. Poprawne słowo to:", correct)
print("\nKoniec gry!")

Pozostało 580 znaków

2019-01-21 11:56
0

Tak myślałem, że czeka mnie jeszcze sporo pracy. Chyba muszę powtórzyć rozdział, bo wydaje mi się, że nie do końca rozumiem ideę kluczy, krotek i list.

edytowany 1x, ostatnio: Krispekowy, 2019-01-21 11:56

Pozostało 580 znaków

2019-01-21 12:54
0

Po poniższej modyfikacji i przypisaniu do kluczy zmiennych nic się nie dzieje. Użytkownik wprowadza parametr 20, a mimo to pozostaje on bez zmian i wynosi "0". Chociaż w momencie wprowadzenia wartości i kiedy dodałem po inkrementacji "print(s)" wartość wynosiła tyle ile faktycznie wprowadziłem. Dopiero w momencie pętli for, wyświetlają się same zera.

Czy ktoś wie gdzie popełniam błąd?

# Program Kreator postaci

# Przypisuję wartości 0 do każdego z parametrów
s = 0
h = 0
m = 0
z = 0

# Tworzę słownik
p = {
    "siła": s,
    "zdrowie": h,
    "mądrość": m,
    "zręczność": z
    }
jackpot = 30

print("\nTwoja postać może otrzymać 30 punktów umiejętności.",
          "\n\nDo wykorzystania pozostało Ci ", jackpot, "umiejętności.")

print("Punkty możesz przypisywać do następujących parametrów bohatera:")
for k, v in p.items():
    print(f"{k}  \t= {v}")

while jackpot > 0:
    choice = input("\nPodaj parametr, który chcesz zmodyfikować: ")
    point = min(jackpot,int(input("\nA teraz podaj liczbę punktów, którą chcesz do niego przypisać (jeśli chcesz zmniejszyć punkty danej umiejętności, wstaw przed cyfrą znak '-'): ")))
    if choice == "siła":
        s += point
    elif choice == "zdrowie":
        h += point
    elif choice == "mądrość":
        m += point
    elif choice == "zręczność":
        h += point
    else:
        print("Podałeś niepoprawną nazwę parametru. Wprowadź ją raz jeszcze.")

    jackpot = jackpot - point
    print("Twój parametr", choice, "zmienił się o", point)
    print("Twój bohater prezentuje się następująco: ")

    for k, v in p.items():
        print(f"{k}  \t= {v}")

print("\n\nWykorzystałeś już wszystkie punkty umiejętności.")

input("\n\nWciśnij ENTER aby zakończyć.")
edytowany 1x, ostatnio: Krispekowy, 2019-01-21 12:55

Pozostało 580 znaków

2019-01-21 13:52
1

W pythonie proste typy (int, str, float itp) są kopiowane, więc twój zapis

s = 0
h = 0
m = 0
z = 0

# Tworzę słownik
p = {
    "siła": s,
    "zdrowie": h,
    "mądrość": m,
    "zręczność": z
    }

działa tak samo, jak

s = 0
h = 0
m = 0
z = 0

# Tworzę słownik
p = {
    "siła": 0,
    "zdrowie": 0,
    "mądrość": 0,
    "zręczność": 0
    }

Moja rada: pozbądź się tych zmiennych pomocniczych (s, h, m, z) i działaj tylko na słowniku.

Pozostało 580 znaków

2019-01-21 17:40
0

Hej. Udało mi się trochę skrócić i uporządkować kod. Natomiast nadal nie mam bladego pojęcia jak "zablokować" wartości w słowniku, aby użytkownik nie mógł wprowadzić ujemnego parametru, po to aby podwyższyć inne...

# Program Kreator postaci

# Tworzę słownik
p = {
    "siła": 0,
    "zdrowie": 0,
    "mądrość": 0,
    "zręczność": 0
    }

# Zmiennej przypisuję ilość maksymalnych punktów w puli
jackpot = 30

print("\nTwoja postać może otrzymać 30 punktów umiejętności.")

print("\nPunkty możesz przypisywać do następujących parametrów bohatera:")

# Wyświetlam listę umiejętności
for k, v in p.items():
    print(f"{k}  \t= {v}")

# Rozpoczynamy modyfikację parametrów
while jackpot > 0:
    choice = input("\nPodaj parametr, który chcesz zmodyfikować: ")
    if choice in p:
        point = min(jackpot,int(input("\nA teraz podaj liczbę punktów, którą chcesz do niego przypisać(jeśli chcesz zmniejszyć punkty danej umiejętności, wstaw przed cyfrą znak '-'): ")))
        p[choice] += point
        jackpot = jackpot - point
        print("Twój parametr", choice, "zmienił się o", point)
    else:
        print("Podałeś NIEPOPRAWNĄ nazwę parametru.")

    print("Twój bohater prezentuje się następująco: ")
    for k, v in p.items():
        print(f"{k}  \t= {v}")
    print("\n\nDo wykorzystania pozostało Ci ", jackpot, "umiejętności.")

# Informacja dla użytkownika, że wykorzystał już wszystkie punkty umiejętności
print("\n\nWykorzystałeś już wszystkie punkty umiejętności.")

input("\n\nWciśnij ENTER aby zakończyć.")

Pozostało 580 znaków

2019-01-21 17:45
0

Przed zrobieniem zmiany w słowniku (p[choice] += point) sprawdź, czy p[choice] + point jest większe/równe zeru i tylko wtedy wykonuj resztę kodu.

Pozostało 580 znaków

2019-01-21 18:42
0

Dzięki. Myślę, że teraz powinno być ok. Chociaż testując program, fajnie byłoby, gdyby po rozdaniu wszystkich umiejętności była możliwość powrotu do modyfikacji parametrów.

# Program Kreator postaci

# Tworzę słownik
p = {
    "siła": 0,
    "zdrowie": 0,
    "mądrość": 0,
    "zręczność": 0
    }

# Zmiennej przypisuję ilość maksymalnych punktów w puli
jackpot = 30

print("\nTwoja postać może otrzymać 30 punktów umiejętności.")

print("\nPunkty możesz przypisywać do następujących parametrów bohatera:")

# Wyświetlam listę umiejętności
for k, v in p.items():
    print(f"{k}  \t= {v}")

# Rozpoczynamy modyfikację parametrów
while jackpot > 0:
    choice = input("\nPodaj parametr, który chcesz zmodyfikować: ")
    if choice in p:
        point = min(jackpot,int(input("\nPodaj liczbę punktów, o którą chcesz zwiększyć bądz zmniejszyć (wstaw '-' przed cyfrą) parametr: ")))
        if (p[choice] + point) >= 0:
            p[choice] += point
            jackpot = jackpot - point
            print("Twój parametr", choice, "zmienił się o", point)
        else:
            print("Parametr nie może być mniejszy od 0!")
    else:
        print("Podałeś NIEPOPRAWNĄ nazwę parametru.")

    print("Twój bohater prezentuje się następująco: ")
    for k, v in p.items():
        print(f"{k}  \t= {v}")
    print("\n\nDo wykorzystania pozostało Ci ", jackpot, "umiejętności.")

# Informacja dla użytkownika, że wykorzystał już wszystkie punkty umiejętności
print("\n\nWykorzystałeś już wszystkie punkty umiejętności.")

input("\n\nWciśnij ENTER aby zakończyć.")

Pozostało 580 znaków

2019-01-21 20:17
0

Rozdział 5, zadanie nr 3
Napisz program Kto jest twoim tatą?, który umożliwia użytkownikowi wprowadzenie imienia i nazwiska osoby płci męskiej i przedstawia imię i nazwisko jej ojca. (Możesz dla zabawy wykorzystać nazwiska celebrytów, osób fikcyjnych lub nawet postaci historycznych). Umożliw użytkownikowi dodawanie, wymianę i usuwanie par syn-ojciec.

# Program "Kto jest Twoim tatą?"
# Program umożliwia użytkownikowi wprowadzenie imienia i nazwiska mężczyzny
# Następnie program wyświetla imię i nazwisko jego ojca
# Dodatkowo użytkownik może modyfikować, dodawać lub usuwać pary syn-ojciec

f = {
    "Leonardo DiCaprio" : "George DiCaprio",
    "Conor McGregor" : "Tony McGregor",
    "Johnny Deep" : "John Christopher Depp",
    "Brad Pitt" : "William Alvin Pitt",
    "Waldemar Kiepski" : "Ferdynand Kiepski"
    }

choice = None
while choice != "0":

    print(
        """
        Sprawdź kto jest Twoim tatą!

        0 - zakończ
        1 - znajdź tatę
        2 - dodaj nową parę syn-ojciec
        3 - 'zmień' ojca
        4 - usuń parę syn-ojciec
        """
        )

    choice = input("Wybieram: ")
    print()

    # Wyjdź z gry
    if choice == "0":
        print("Do zobaczenia!")

    # Znajdź tatę
    elif choice == "1":
        son = input("Podaj imię i nazwisko syna: ")
        if son in f:
            father = f[son]
            print("\nOjcem", son, "jest", father)
        else:
            print("\nNiestety nie znam ojca osoby:", son)

    # Dodaj parę syn-ojciec
    elif choice == "2":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son not in f:
            father = input("Wprowadź imię i nazwisko ojca: ")
            f[son] = father
            print("\nNowa para syn-ojciec zostałą dodana do bazy.")
        else:
            print(son, "już istnieje w bazie!")

    # Zmień ojca
    elif choice == "3":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son in f:
             father = input("Wprowadź imię i nazwisko nowego ojca: ")
             f[son] = father
             print(son, "ma już nowego ojca! Jest nim", father)
        else:
            print("\nNiestety nie znam ojca tej osoby:", son)

    # Usuń parę syn-ojciec
    elif choice == "4":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son in f:
            del f[son]
            print("\nSyn i ojciec zostali usunięci z bazy.")
        else:
            print("\nNie mogę tego wykonać! Osoby o tym nazwisku nie ma w bazie.")

    # Nieznany wybór
    else:
        print("Niestety,", choice, "jest nieprawidłowym wyborem.")

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
edytowany 1x, ostatnio: Krispekowy, 2019-01-21 20:17

Pozostało 580 znaków

2019-01-21 20:59
0

Jest całkiem spoko. Poczytaj o formatowaniu stringów i staraj się go używać, nawet do printów. Z takich pierdół to klamra zamykająca dicta (około 10 linijki) nie powinna być zindentowana. Treść multi-line stringa też możesz wyrównać do lewej, bo jest niepotrzebnie wcięty w programie.

Pozostało 580 znaków

2019-01-22 18:20
0

Czy do każdego klucza w słowniku może być przypisanych więcej definicji? W kolejnym zadaniu proszą mnie, aby rozbudować ten kod, poprzez dodanie opcji, która umożliwi użytkownikowi wprowadzenie imienia i (lub) nazwiska jakiejś osoby i uzyskanie odpowiedzi, kto jest jej dziadkiem :)

Ok. Rozwiązałem to inaczej, chociaż nie wiem czy autorowi zadania o to chodziło.

Rozdział 5, zadanie nr 4
Udoskonal program Kto jest moim tatą? poprzez dodanie opcji, która umożliwi użytkownikowi wprowadzenie imienia i (lub) nazwiska jakiejś osoby i uzyskanie odpowiedzi, kto jest jej dziadkiem. Twój program powinien nadal wykorzystywać tylko jeden słownik par syn-ojciec. Pamiętaj, aby włączyć do swojego słownika kilka pokoleń, tak aby możliwe było tego rodzaju dopasowanie.

# Program "Kto jest Twoim tatą?"
# Program umożliwia użytkownikowi wprowadzenie imienia i nazwiska mężczyzny
# Następnie program wyświetla imię i nazwisko jego ojca
# Dodatkowo użytkownik może modyfikować, dodawać lub usuwać pary syn-ojciec

f = {
    "Leonardo DiCaprio" : "George DiCaprio",
    "George DiCaprio" : "Older George DiCaprio",
    "Conor McGregor" : "Tony McGregor",
    "Tony McGregor" : "Older Tony McGregor",
    "Johnny Deep" : "John Christopher Depp",
    "John Christopher Depp" : "Older John Christopher Depp",
    "Brad Pitt" : "William Alvin Pitt",
    "William Alvin Pitt" : "Older William Alvin Pitt",
    "Waldemar Kiepski" : "Ferdynand Kiepski",
    "Ferdynand Kiepski" : "Older Ferdynand Kiepski"
    }

choice = None
while choice != "0":

    print(
        """
        Sprawdź kto jest Twoim tatą (lub dziadkiem)!

        0 - zakończ
        1 - znajdź tatę
        2 - dodaj nową parę syn-ojciec
        3 - 'zmień' ojca
        4 - usuń parę syn-ojciec
        5 - [Nowość!] znajdź dziadka
        """
        )

    choice = input("Wybieram: ")
    print()

    # Wyjdź z gry
    if choice == "0":
        print("Do zobaczenia!")

    # Znajdź tatę
    elif choice == "1":
        son = input("Podaj imię i nazwisko syna: ")
        if son in f:
            father = f[son]
            print("\nOjcem", son, "jest", father)
        else:
            print("\nNiestety nie znam ojca osoby:", son)

    # Dodaj parę syn-ojciec
    elif choice == "2":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son not in f:
            father = input("Wprowadź imię i nazwisko ojca: ")
            f[son] = father
            print("\nNowa para syn-ojciec zostałą dodana do bazy.")
        else:
            print(son, "już istnieje w bazie!")

    # Zmień ojca
    elif choice == "3":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son in f:
             father = input("Wprowadź imię i nazwisko nowego ojca: ")
             f[son] = father
             print(son, "ma już nowego ojca! Jest nim", father)
        else:
            print("\nNiestety nie znam ojca tej osoby:", son)

    # Usuń parę syn-ojciec
    elif choice == "4":
        son = input("Wprowadź imię i nazwisko syna: ")
        if son in f:
            del f[son]
            print("\nSyn i ojciec zostali usunięci z bazy.")
        else:
            print("\nNie mogę tego wykonać! Osoby o tym nazwisku nie ma w bazie.")

    # Znajdź dziadka
    elif choice == "5":
        grandson = input("Wprowadź imię i nazwisko osoby, której dziadka chcesz znaleźć: ")
        if grandson in f:
            son = f[grandson]
            father = f[son]
            print("\nDziadkiem", grandson, "jest", father)
        else:
            print("\nNiestety nie znam dziadka osoby:", grandson)

    # Nieznany wybór
    else:
        print("Niestety,", choice, "jest nieprawidłowym wyborem.")

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
edytowany 1x, ostatnio: Krispekowy, 2019-01-22 19:03

Pozostało 580 znaków

2019-01-22 19:57
0

Wydaje mi się, że o to chodziło - znaleźć ojca ojca. Tylko, że twój program się wysypie, jeśli podasz imię, które nie ma zdefiniowanego dziadka. Zamiast sprawdzać if x in y, możesz użyć dict.get

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot