Python dla każdego - zadania.

Python dla każdego - zadania.

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

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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.

Kopiuj
#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!")

Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:dzień
0

Na szybko, to komunikat o niewłaściwym słowie wyświetli się zawsze, nawet jak zgadniesz poprawny wyraz.

sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
1
Kopiuj
#Następnie komputer losuje z zestawu słów jedno
word = random.choice(words)
 
#Przypisuję zmienne
correct = word

Mnożysz byty ponad potrzebę. Wystarczy correct = random.choice(words).

Kopiuj
if tries > 4:
        input("\nPrzykro mi, wykorzystałeś(aś) już wszystkie 5 prób podpowiedzi. Musisz odpowiedzieć. Co to za słowo? ")

Tutaj pytasz o słowo, ale nic z tego nie wynika. Gracz wpisuje słowo, a potem dostaje pytanie "A więc co to za słowo?"


My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
edytowany 1x, ostatnio: sugar_hiccup
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Dzięki, poprawiłem zgodnie z uwagami:

Kopiuj
#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 (prawidłowa odpowiedź)
correct = random.choice(words)
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 ")
if choice1 == "tak":
    answer = input("\nA więc co to za słowo? ")

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:
        answer = input("\nA więc co to za słowo? ")
        break
    if tries > 4:
        answer = input("\nPrzykro mi, wykorzystałeś(aś) już wszystkie 5 prób podpowiedzi. Musisz odpowiedzieć. Co to za słowo? ")

if answer == correct:
    print("\n\nGratulacje! Udało Ci się odpowiedzieć po", tries, "podpowiedziach!")
else:
    print("\n\nTo nie to słowo. Poprawne słowo to:", correct)
    
print("\nKoniec gry!")

Jeśli chodzi o uwagę związaną z przypisaniem zmiennej "correct = word" to chyba nawyk początkującego. W książce wszystko rozpisują krok po kroku i pewnie stąd się to wzięło...

S2
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:4
0
  1. Fajnie, ze probujesz pisac po angielsku nazwy zmiennych, ale staraj sie byc konsekwentym (zapomniales o zmiennej "litera")
  2. Czy sprawdzanie prób w warunku
Kopiuj

while choice1 == "nie" and tries<5:

    if choice2 == "tak" and tries <5:

Jest potrzebne, gdy masz

Kopiuj
    if tries > 4:
        answer = input("\nPrzykro mi, wykorzystałeś(aś) już wszystkie 5 prób podpowiedzi. Musisz odpowiedzieć. Co to za słowo? ")

Mozesz dodac tam break i wyjdzie to samo, a komputer mniej warunkow do sprawdzenia ma? Sprawdz


POCZATKUJACY NIE BRAC MOICH RAD NA POWAZNIE
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Faktycznie, śmiga identycznie bez tego warunku :) dzięki za pomoc. "To są właśnie te detale" jak to mawia klasyk.

Kopiuj
#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 (prawidłowa odpowiedź)
correct = random.choice(words)
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 ")
if choice1 == "tak":
    answer = input("\nA więc co to za słowo? ")

while choice1 == "nie":
    letter = input("\nWpisz literę, a ja odpowiem, czy zawiera się ona w tym słowie: ")
    if letter in correct:
        print("\nTak, litera", letter, "znajduje się w tym słowie.")
    else:
        print("\nNie, litera", letter, "nie znajduje się w tym słowie.")
    choice2 = input("\nCzy chcesz spytać o kolejną literę?")
    if choice2 == "tak":
        tries += 1
    else:
        answer = input("\nA więc co to za słowo? ")
    if tries > 4:
        answer = input("\nPrzykro mi, wykorzystałeś(aś) już wszystkie 5 prób podpowiedzi. Musisz odpowiedzieć. Co to za słowo? ")
        break
if answer == correct:
    print("\n\nGratulacje! Udało Ci się odpowiedzieć po", tries, "podpowiedziach!")
else:
    print("\n\nTo nie to słowo. Poprawne słowo to:", correct)
    
print("\nKoniec gry!")
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Wrzucam kolejne zadanie z prośbą o uwagi.

Rozdział 5, zadanie nr 1
Utwórz program, który wypisuje listę słów w przypadkowej kolejności. Program powinien wypisać wszystkie słowa bez żadnych powtórzeń.

Kopiuj
#Program wyświetla listę elementów w losowej kolejności
#Program nie może powtórzyć żadnego elementu

import random

elements = ["piłka nożna", "siatkówka", "skoki narciarskie", "żużel", "hokej"]

print("Dyscypliny sportowe to m.in.:")

while elements:
    random_item = random.choice(elements)
    print(random_item)
    elements.remove(random_item)

input("\nWciśnij Enter, aby zakończyć program.")

PS. od kilku godzin męczę się nad zadaniem nr 2 z rozdziału 5. Czy ktoś może mi powiedzieć, czy jest opcja wyświetlenia słownika jako listy tj. od nowej linii każda pozycja z parametrem? Wklejam też treść dla chcących pomóc:
Napisz program Kreator postaci do gry z podziałem na role. Gracz powinien otrzymać pulę 30 punktów, którą może spożytkować na cztery atrybuty: siła, zdrowie, mądrość i zręczność. Gracz powinien mieć możliwość przeznaczania punktów z puli na dowolny atrybut, jak również możliwość odbierania punktów przypisanych do atrybutu i przekazywania ich z powrotem do puli.

Nie jestem pewien czy w tym zadaniu mogę użyć listy czy powinienem użyć słownika?

IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
0
Krispekowy napisał(a):

Wrzucam kolejne zadanie z prośbą o uwagi.

Rozdział 5, zadanie nr 1
Utwórz program, który wypisuje listę słów w przypadkowej kolejności. Program powinien wypisać wszystkie słowa bez żadnych powtórzeń.

Kopiuj
#Program wyświetla listę elementów w losowej kolejności
#Program nie może powtórzyć żadnego elementu

import random

elements = ["piłka nożna", "siatkówka", "skoki narciarskie", "żużel", "hokej"]

print("Dyscypliny sportowe to m.in.:")

while elements:
    random_item = random.choice(elements)
    print(random_item)
    elements.remove(random_item)

input("\nWciśnij Enter, aby zakończyć program.")

Jak najbardziej poprawne, jedyne moje uwagi to:

  • Po hastagu zostaw spację i dopiero pisz komentarz, x = 5 # o, w ten sposob
  • Możesz użyć random.shuffle(arr) do pomieszania tablicy w miejscu, lub random.sample(arr, len(arr)) by stworzyć nową tablicę z pomieszanymi elementami. Czytaj dokładniej dokumentację, bo python ma bardzo rozbudowaną bibliotekę standardową i można sobie dzięki niej zaoszczędzić pracy :)

PS. od kilku godzin męczę się nad zadaniem nr 2 z rozdziału 5. Czy ktoś może mi powiedzieć, czy jest opcja wyświetlenia słownika jako listy tj. od nowej linii każda pozycja z parametrem? Wklejam też treść dla chcących pomóc:
Napisz program Kreator postaci do gry z podziałem na role. Gracz powinien otrzymać pulę 30 punktów, którą może spożytkować na cztery atrybuty: siła, zdrowie, mądrość i zręczność. Gracz powinien mieć możliwość przeznaczania punktów z puli na dowolny atrybut, jak również możliwość odbierania punktów przypisanych do atrybutu i przekazywania ich z powrotem do puli.

Nie jestem pewien czy w tym zadaniu mogę użyć listy czy powinienem użyć słownika?

Ja bym zrobił osobną klasę, ale w zadaniu pewnie chodzi o słownik z kluczami 'sila', 'madrosc', 'zdrowie', 'zresznosc'. Po dictcie możesz iterować w ten sposób:

Kopiuj
d = {
    'sila': 20,
    'zresznosc': 5,
}
for k, v in d.items():
    print(f'pod kluczem {k} jest wartosc {v}')

P.S. bardzo propsuję, że tak czytelnie prowadzisz temat, oraz, że zamieszczasz swój kod zamiast prosić o gotowca :)

edytowany 2x, ostatnio: iksde
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Jak najbardziej poprawne, jedyne moje uwagi to:

  • Po hastagu zostaw spację i dopiero pisz komentarz, x = 5 # o, w ten sposob
  • Możesz użyć random.shuffle(arr) do pomieszania tablicy w miejscu, lub random.sample(arr, len(arr)) by stworzyć nową tablicę z pomieszanymi elementami. Czytaj dokładniej dokumentację, bo python ma bardzo rozbudowaną bibliotekę standardową i można sobie dzięki niej zaoszczędzić pracy :)

Pewnie dlatego nie użyłem tych metod, bo w książce nie było o nich mowy póki co, a za dokumentację pythona jeszcze się nie zabrałem. Wielkie dzięki za pomoc.

Ja bym zrobił osobną klasę, ale w zadaniu pewnie chodzi o słownik z kluczami 'sila', 'madrosc', 'zdrowie', 'zresznosc'. Po dictcie możesz iterować w ten sposób:

Kopiuj
d = {
    'sila': 20,
    'zresznosc': 5,
}
for k, v in d.items():
    print(f'pod kluczem {k} jest wartosc {v}')

P.S. bardzo propsuję, że tak czytelnie prowadzisz temat, oraz, że zamieszczasz swój kod zamiast prosić o gotowca :)

Dzięki za pomoc. Zadanie poprzedza rozdział o listach i słownikach, zatem wydaje mi się, że klas tutaj nie oczekują (poza tym jeszcze nie wiem z czym to się je:) ). Dzisiaj wrzucę rozwiązanie tego zadania.

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Rozdział 5, zadanie nr 2
Napisz program Kreator postaci do gry z podziałem na role. Gracz powinien otrzymać pulę 30 punktów, którą może spożytkować na cztery atrybuty: siła, zdrowie, mądrość i zręczność. Gracz powinien mieć możliwość przeznaczania punktów z puli na dowolny atrybut, jak również możliwość odbierania punktów przypisanych do atrybutu i przekazywania ich z powrotem do puli.

Kopiuj
# Program Kreator postaci

p = {"siła": 0,
"zdrowie": 0,
"mądrość": 0,
"zręczność": 0}
statment = ["siła",
          "wytrzymałość",
          "charyzma",
          "obrona",
          "inteligencja"]
jackpot = int(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ć: ")
    if choice == "siła":
        point = 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, "zwiększył się o", point)
    elif choice == "zdrowie":
        point = 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, "zwiększył się o", point)
    elif choice == "mądrość":
        point = 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, "zwiększył się o", point)
    elif choice == "zręczność":
        point = 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, "zwiększył się o", point)
    else:
        print("Podałeś niepoprawną nazwę parametru. Wprowadź ją raz jeszcze.")
        

print("\n\nWykorzystałeś już wszystkie punkty, Twoja postać prezentuje się następująco:")
for k, v in p.items():
    print(f"{k}  \t= {v}")

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

Są dwie rzeczy, których nie mogę rozwiąząć:

  1. Jak ograniczyć pulę od 0 do 30 punktów? Chodzi o to, że podając np. 20 pkt siła, pętla się powtarza, a gdy podam kolejne 20 pkt, to pętla się przerywa, ale do parametru dodano 20 pkt mimo iż w puli zostało 30.
  2. Jak ograniczyć wybór użytkownika, aby do parametrów (siła, mądrość itp.) nie mógł przypisywać ujemnych wartości. Chodzi o to, aby uniknąć sytuacji "siła: -20", a "mądrość: 50"?
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
0

Twój program nie do końca robi to, co powinien. Powinieneś zwiększać wartość parametru, a ty ją przypisujesz. Jak podam dwa razy "siła" i "20", wynikiem będzie

Kopiuj
siła  	= 20
zdrowie  	= 0
mądrość  	= 0
zręczność  	= 0

Protip: użyj nazwy podanego parametru jako klucza do słownika, to nie będziesz musiał 4 razy klepać tego samego kodu :) w sumie już to robisz. Po co każdy przypadek rozpatrujesz osobno?

jackpot = int(30)

To pewnie jakaś pozostałość po castowaniu inputu, ale wystarczy napisać jackpot = 30 i python będzie wiedział, że to int.

Kopiuj

p = {"siła": 0,
"zdrowie": 0,
"mądrość": 0,
"zręczność": 0}
statment = ["siła",
"wytrzymałość",
"charyzma",
"obrona",
"inteligencja"]

Kopiuj

Popraw formatowanie. To nie jest błąd składniowy, ale imo warto się od początku trzymać dobrych praktyk. Wyrównuj kolejne elementy listy/dicta do poprzednich (1), albo zaczynaj wszystko w nowej linii (2, preferowana przeze mnie):
(1)
```python
p = {"siła": 0,
     "zdrowie": 0,
     "mądrość": 0,
     "zręczność": 0}
statment = ["siła",
            "wytrzymałość",
            "charyzma",
            "obrona",
            "inteligencja"]

(2)

Kopiuj
p = {
    "siła": 0,
    "zdrowie": 0,
    "mądrość": 0,
    "zręczność": 0,
}
statment = [
    "siła",
    "wytrzymałość",
    "charyzma",
    "obrona",
    "inteligencja",
]
  1. Jak ograniczyć pulę od 0 do 30 punktów? Chodzi o to, że podając np. 20 pkt siła, pętla się powtarza, a gdy podam kolejne 20 pkt, to pętla się przerywa, ale do parametru dodano 20 pkt mimo iż w puli zostało 30.

Możesz użyć funkcji min żeby wiedzieć, ile punktów faktycznie powinieneś dodać, uwzględniając limit, np. jeśli zostało 10 punktów do rozdania, a użytkownik wpisze 20, to min(limit, user_input) zwróci 10.

  1. Jak ograniczyć wybór użytkownika, aby do parametrów (siła, mądrość itp.) nie mógł przypisywać ujemnych wartości. Chodzi o to, aby uniknąć sytuacji "siła: -20", a "mądrość: 50"?

Przed przetworzeniem polecenia użytkownika sprawdź wartość w słowniku pod podanym kluczem i upewnij się, że nie zejdzie poniżej zera.

edytowany 3x, ostatnio: iksde
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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?

Kopiuj
# 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
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
1

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

Kopiuj
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

Kopiuj
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.

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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...

Kopiuj
# 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ć.")

IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
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.

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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.

Kopiuj
# 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ć.")
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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.

Kopiuj
# 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
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
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.

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
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.

Kopiuj
# 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
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
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

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Rozdział 6, zadanie nr 1
Popraw funkcję ask_number() w taki sposób, aby mogła być wywoływana z wartością kroku. Spraw, aby domyślną wartością kroku była liczba 1.

Tutaj chyba potrzeba nieco objaśnień, dla tych co książki nie czytali (pomijam fakt, że nie do końca rozumiem o co chodzi autorowi w tym pytaniu).

W rozdziale 6 autor porusza po raz pierwszy kwestię funkcji. Rozdział finalnie kończy się zaprogramowaniem gry pod nazwą "Kółko i krzyżyk", której kod poniżej wklejam. Powyższe pytanie dotyczy właśnie kodu poniżej.

Kopiuj
# Kółko i krzyżyk
# Komputer gra w kółko i krzyżyk przeciwko człowiekowi
   
# stałe globalne
X = "X"
O = "O"
EMPTY = " "
TIE = "TIE"
NUM_SQUARES = 9


def display_instruct():
    """Wyświetl instrukcję gry."""  
    print(
    """
    Witaj w największym intelektualnym wyzwaniu wszech czasów, jakim jest
    gra 'Kółko i krzyżyk'. Będzie to ostateczna rozgrywka między Twoim
    ludzkim mózgiem a moim krzemowym procesorem.  

    Swoje posunięcie wskażesz poprzez wprowadzenie liczby z zakresu 0 - 8.
    Liczba ta odpowiada pozycji na planszy zgodnie z poniższym schematem:
    
                    0 | 1 | 2
                    ---------
                    3 | 4 | 5
                    ---------
                    6 | 7 | 8

    Przygotuj się, Człowieku.  Ostateczna batalia niebawem się rozpocznie. \n
    """
    )


def ask_yes_no(question):
    """Zadaj pytanie, na które można odpowiedzieć tak lub nie."""
    response = None
    while response not in ("t", "n"):
        response = input(question).lower()
    return response


def ask_number(question, low, high, step):
    """Poproś o podanie liczby z odpowiedniego zakresu."""
    response = None
    while response not in range(low, high, step):
        response = int(input(question))
    return response


def pieces():
    """Ustal, czy pierwszy ruch należy do gracza, czy do komputera."""
    go_first = ask_yes_no("Czy chcesz mieć prawo do pierwszego ruchu? (t/n): ")
    if go_first == "t":
        print("\nWięc pierwszy ruch należy do Ciebie.  Będzie Ci potrzebny.")
        human = X
        computer = O
    else:
        print("\nTwoja odwaga Cię zgubi... Ja wykonuję pierwszy ruch.")
        computer = X
        human = O
    return computer, human


def new_board():
    """Utwórz nową planszę gry."""
    board = []
    for square in range(NUM_SQUARES):
        board.append(EMPTY)
    return board


def display_board(board):
    """Wyświetl planszę gry na ekranie."""
    print("\n\t", board[0], "|", board[1], "|", board[2])
    print("\t", "---------")
    print("\t", board[3], "|", board[4], "|", board[5])
    print("\t", "---------")
    print("\t", board[6], "|", board[7], "|", board[8], "\n")


def legal_moves(board):
    """Utwórz listę prawidłowych ruchów."""
    moves = []
    for square in range(NUM_SQUARES):
        if board[square] == EMPTY:
            moves.append(square)
    return moves


def winner(board):
    """Ustal zwycięzcę gry."""
    WAYS_TO_WIN = ((0, 1, 2),
                   (3, 4, 5),
                   (6, 7, 8),
                   (0, 3, 6),
                   (1, 4, 7),
                   (2, 5, 8),
                   (0, 4, 8),
                   (2, 4, 6))
    
    for row in WAYS_TO_WIN:
        if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
            winner = board[row[0]]
            return winner

    if EMPTY not in board:
        return TIE

    return None


def human_move(board, human):
    """Odczytaj ruch człowieka."""  
    legal = legal_moves(board)
    move = None
    while move not in legal:
        move = ask_number("Jaki będzie Twój ruch? (0 - 8):", 0, NUM_SQUARES,1)
        if move not in legal:
            print("\nTo pole jest już zajęte, niemądry Człowieku.  Wybierz inne.\n")
    print("Znakomicie...")
    return move


def computer_move(board, computer, human):
    """Spowoduj wykonanie ruchu przez komputer."""
    # utwórz kopię roboczą, ponieważ funkcja będzie zmieniać listę
    board = board[:]
    # najlepsze pozycje do zajęcia według kolejności
    BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)

    print("Wybieram pole numer", end=" ")
    
    # jeśli komputer może wygrać, wykonaj ten ruch
    for move in legal_moves(board):
        board[move] = computer
        if winner(board) == computer:
            print(move)
            return move
        # ten ruch został sprawdzony, wycofaj go
        board[move] = EMPTY
    
    # jeśli człowiek może wygrać, zablokuj ten ruch
    for move in legal_moves(board):
        board[move] = human
        if winner(board) == human:
            print(move)
            return move
        # ten ruch został sprawdzony, wycofaj go
        board[move] = EMPTY

    # ponieważ nikt nie może wygrać w następnym ruchu, wybierz najlepsze wolne pole
    for move in BEST_MOVES:
        if move in legal_moves(board):
            print(move)
            return move


def next_turn(turn):
    """Zmień wykonawcę ruchu."""
    if turn == X:
        return O
    else:
        return X

    
def congrat_winner(the_winner, computer, human):
    """Pogratuluj zwycięzcy."""
    if the_winner != TIE:
        print(the_winner, "jest zwycięzcą!\n")
    else:
        print("Remis!\n")

    if the_winner == computer:
        print("Jak przewidywałem, Człowieku, jeszcze raz zostałem triumfatorem.  \n" \
              "Dowód na to, że komputery przewyższają ludzi pod każdym względem.")

    elif the_winner == human:
        print("No nie!  To niemożliwe!  Jakoś udało Ci się mnie zwieść, Człowieku. \n" \
              "Ale to się nigdy nie powtórzy!  Ja, komputer, przyrzekam Ci to!")

    elif the_winner == TIE:
        print("Miałeś mnóstwo szczęścia, Człowieku, i jakoś udało Ci się ze mną " \
              "zremisować. \nŚwiętuj ten dzień... bo to najlepszy wynik, jaki możesz " \
              "kiedykolwiek osiągnąć.")


def main():
    display_instruct()
    computer, human = pieces()
    turn = X
    board = new_board()
    display_board(board)

    while not winner(board):
        if turn == human:
            move = human_move(board, human)
            board[move] = human
        else:
            move = computer_move(board, computer, human)
            board[move] = computer
        display_board(board)
        turn = next_turn(turn)

    the_winner = winner(board)
    congrat_winner(the_winner, computer, human)


# rozpocznij program
main()
input("\n\nAby zakończyć grę, naciśnij klawisz Enter.")

Natomiast tutaj wklejam moje "rozwiązanie", które wyciąłem z powyższego kodu. Program działa, ale niestety nie wiem czy dobrze, bo rozwiązanie zadania poprzez "przypisanie" kroku do funkcji ask_number wydaje mi się banalnie proste. Nie znalazłem żadnej różnicy w działaniu programu stąd też nie mam bladego pojęcia po co akurat w miejscu, gdzie użytkownik ma wskazać numer, autor prosi o krok...

Definicja funkcji:

Kopiuj
def ask_number(question, low, high, step):
    """Poproś o podanie liczby z odpowiedniego zakresu."""
    response = None
    while response not in range(low, high, step):
        response = int(input(question))
    return response

Wykorzystanie funkcji w definicji innej:

Kopiuj
def human_move(board, human):
    """Odczytaj ruch człowieka."""  
    legal = legal_moves(board)
    move = None
    while move not in legal:
        move = ask_number("Jaki będzie Twój ruch? (0 - 8):", 0, NUM_SQUARES,1)
        if move not in legal:
            print("\nTo pole jest już zajęte, niemądry Człowieku.  Wybierz inne.\n")
    print("Znakomicie...")
    return move
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Panowie i Panie pomocy :)

Rozdział 6, zadanie nr 2
Zmodyfikuj projekt Jaka to liczba? z rozdziału 3. przez użycie w nim funkcji ask_number().

Kopiuj
# Jaka to liczba?
#
# Komputer wybiera losowo liczbę z zakresu od 1 do 100.
# Gracz próbuje ją odgadnąć, a komputer go informuje,
# czy podana przez niego liczba jest: za duża, za mała,
# prawidłowa.

import random  

print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n")

the_number = random.randint(1, 100)


# definicja funkcji
def ask_the_number(guess):
    while guess != the_number:
        if guess > the_number:
            print("Za duża...")
        else:
            print("Za mała...")
        tries += 1
        guess = int(input("Wprowadź liczbę: "))
        
# kod główny
tries = 1
ask_the_number(int(input("Wprowadź liczbę: ")))
print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
  
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Po odgadnięciu poprawnej liczby wyskakuje mi błąd:
Traceback (most recent call last):
File "E:\Praca\IT Analityk biznesowy\Python - język programowania\kody\r03\jaka_to_liczba.py", line 29, in <module>
ask_the_number(int(input("Wprowadź liczbę: ")))
File "E:\Praca\IT Analityk biznesowy\Python - język programowania\kody\r03\jaka_to_liczba.py", line 24, in ask_the_number
tries += 1
UnboundLocalError: local variable 'tries' referenced before assignment

edytowany 1x, ostatnio: Krispekowy
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
0

Jeśli chcesz modyfikować zmienne spoza scope'u funkcji, musisz dodać global <var> gdzieś w ciele funkcji zanim jej użyjesz. Można, ale to jest zła praktyka - lepiej będzie zadeklarować tries wewnątrz funkcji, a potem je zwrócić.

edytowany 1x, ostatnio: iksde
Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

W jaki sposób mogę to zrobić? Chodzi mi o zwrócenie zmienniej z wnętrza funkcji. Ten sposób poniżej powoduje problem w przypadku poprawnej odp - nie zadeklarowano zmiennej "tries"

Kopiuj
# definicja zmiennej
def ask_the_number(guess, tries):
    while guess != the_number:
        if guess > the_number:
            print("Za duża...")
        else:
            print("Za mała...")
        tries += 1
        guess = int(input("Wprowadź liczbę: "))

# kod główny
ask_the_number(int(input("Wprowadź liczbę: ")), 1)

print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
  
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
0

Nie przekazuj zmiennej tries jako parametr, tylko zdefiniuj ją w ciele funkcji, a pod koniec zwróć. Wynik ten funkcji przypisz do zmiennej, której potem użyjesz do wypisania ile prób użytkownik potrzebował do odgadnięcia liczby.

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0

Chyba teraz wszystko gra. Dzięki za pomoc.

Kopiuj
# Jaka to liczba?
#
# Komputer wybiera losowo liczbę z zakresu od 1 do 100.
# Gracz próbuje ją odgadnąć, a komputer go informuje,
# czy podana przez niego liczba jest: za duża, za mała,
# prawidłowa.

import random  

print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n")

the_number = random.randint(1, 100)


# definicja zmiennej
def ask_the_number(guess):
    tries = 1
    while guess != the_number:
        if guess > the_number:
            print("Za duża...")
        else:
            print("Za mała...")
        tries += 1
        guess = int(input("Wprowadź liczbę: "))
    return tries

# kod główny
tries = ask_the_number(int(input("Wprowadź liczbę: ")))

print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
  
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:5 dni
  • Postów:1027
0
Krispekowy napisał(a):

Chyba teraz wszystko gra. Dzięki za pomoc.

Kopiuj
# Jaka to liczba?
#
# Komputer wybiera losowo liczbę z zakresu od 1 do 100.
# Gracz próbuje ją odgadnąć, a komputer go informuje,
# czy podana przez niego liczba jest: za duża, za mała,
# prawidłowa.

import random  

print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n")

the_number = random.randint(1, 100)


# definicja zmiennej
def ask_the_number(guess):
    tries = 1
    while guess != the_number:
        if guess > the_number:
            print("Za duża...")
        else:
            print("Za mała...")
        tries += 1
        guess = int(input("Wprowadź liczbę: "))
    return tries

# kod główny
tries = ask_the_number(int(input("Wprowadź liczbę: ")))

print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
  
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Dlaczego guess jest parametrem funkcji?

Krispekowy
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:184
0
enedil napisał(a):
Krispekowy napisał(a):

Chyba teraz wszystko gra. Dzięki za pomoc.

Kopiuj
# Jaka to liczba?
#
# Komputer wybiera losowo liczbę z zakresu od 1 do 100.
# Gracz próbuje ją odgadnąć, a komputer go informuje,
# czy podana przez niego liczba jest: za duża, za mała,
# prawidłowa.

import random  

print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n")

the_number = random.randint(1, 100)


# definicja zmiennej
def ask_the_number(guess):
    tries = 1
    while guess != the_number:
        if guess > the_number:
            print("Za duża...")
        else:
            print("Za mała...")
        tries += 1
        guess = int(input("Wprowadź liczbę: "))
    return tries

# kod główny
tries = ask_the_number(int(input("Wprowadź liczbę: ")))

print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
  
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Dlaczego guess jest parametrem funkcji?

Nie rozumiem? Po prostu taką nazwę przypisałem.

superdurszlak
nie musisz cytować całego posta razem z poprzednimi cytowaniami, robi się z tego wielki blob z którego ciężko coś przeczytać :P
S2
Gratuluje zapału, powodzenia
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:5 dni
  • Postów:1027
0

Chodzi o to, że w takim wypadku parametr nie powinien być w ogóle przesyłany, a pierwszy input powinien znaleźć się już w funkcji.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)