Poprawa programu w zadaniu

Wątek przeniesiony 2019-01-02 09:04 z Newbie przez Adam Boduch.

0

Witajcie, mam poprawić program, jednak autor poszedł grubo do przodu ze skomplikowaniem nauczania.
Zadanie.
Popraw program Wymieszane litery tak, żeby każdemu słowu towarzyszyła
podpowiedź. Gracz powinien mieć możliwość zobaczenia podpowiedzi, jeśli
utknie w martwym punkcie. Dodaj system punktacji, który nagradza graczy
rozwiązujących anagram bez uciekania się do podpowiedzi.

# Wymieszane litery
# Wymieszane litery
# Komputer wybiera losowo słowo, a potem miesza w nim litery
# Gracz powinien odgadnąć pierwotne słowo

import random

# utwórz sekwencję słów do wyboru
WORDS = ("python", "anagram", "łatwy", "skomplikowany", "odpowiedź", "ksylofon")
# wybierz losowo jedno słowo z sekwencji
word = random.choice(WORDS)
# utwórz zmienną, by później użyć jej do sprawdzenia, czy odpowiedź jest poprawna
correct = word

# utwórz 'pomieszaną' wersję słowa
jumble =""
while word:
    position = random.randrange(len(word))
    jumble += word[position]
    word = word[:position] + word[(position + 1):]

# rozpocznij grę
print(
"""
           Witaj w grze 'Wymieszane litery'!
        
   Uporządkuj litery, aby odtworzyć prawidłowe słowo.
(Aby zakończyć zgadywanie, naciśnij klawisz Enter bez podawania odpowiedzi.)
"""
)
print("Zgadnij, jakie to słowo:", jumble)

guess = input("\nTwoja odpowiedź: ")
while guess != correct and guess != "":
    print("Niestety, to nie to słowo.")
    guess = input("Twoja odpowiedź: ")
    
if guess == correct:
    print("Zgadza się! Zgadłeś!\n")

print("Dziękuję za udział w grze.")

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

0

To jest skomplikowane zadanie? O_o Przecież wystarczy żebyś naklepał jakąś funkcję odpowiedzialną za podpowiedzi i w tej pętli:

while guess != correct and guess != "":
    print("Niestety, to nie to słowo.")
    guess = input("Twoja odpowiedź: ")

byś ją wywoływał. Wystarczyłoby dodać jakiś counter i inkrementować go za każdym razem kiedy funkcja z podpowiedzią została wywołana. Kolejna sprawa to stworzenie zmiennej przechowującej punkty. Inkrementujesz tą zmienną tylko wtedy kiedy counter == 0 i użytkownik odgadł hasło. Szkic:

point_counter = 0
tips_counter = 0

def tips():
    # podpowiedzi ktore mozesz zaimplementowac jakie chcesz bo w poleceniu nie podano inaczej

while guess != correct and guess != "":
    print("Niestety, to nie to słowo.")
    want_tips = input("Czy chcesz skorzystac z podpowiedzi Y/N: ")
    if want_tips == 'Y':
         tips()
         tips_counter += 1
    guess = input("Twoja odpowiedź: ")

   if guess == correct:
     print("Zgadza się! Zgadłeś! Ale nie dostajesz punktow poniewaz skorzystales z podpowiedzi.\n")
     break

   elif guess == correct and tips_counter == 0:
      point_counter += 1
      print("Zgadza się! Zgadłeś! I dostajesz punkt.\n")
      break

Zaznaczam, że ten kod można napisać lepiej, bez użycia break'ów i w ogóle, natomiast jest to tylko szkic prezentujący logikę rozwiązania. Aktualnie nie mam czasu, żeby naklepać piękny kod - jeśli masz to zrobić na zajęcia to Ty musisz się postarać żeby kod był jak najlepszy.

0
Świetny Lew napisał(a):

Witajcie, mam poprawić program, jednak autor poszedł grubo do przodu ze skomplikowaniem nauczania.

No to już się boję :ooo

Zadanie.
Popraw program Wymieszane litery tak, żeby każdemu słowu towarzyszyła
podpowiedź.

krotka (słowo, podpowiedź)? albo słownik w którym kluczem jest odpowiedź, a wartością podpowiedź lub nawet ich lista? co w tym trudnego?

Gracz powinien mieć możliwość zobaczenia podpowiedzi, jeśli
utknie w martwym punkcie.

No to może jakiś magiczny input który spowoduje wyświetlenie podpowiedzi i odjęcie punktu? choćby "hint" albo "?"? I jeśli się pojawi to obcinamy punkciki.

Dodaj system punktacji, który nagradza graczy rozwiązujących anagram bez uciekania się do podpowiedzi.

Dodajesz punkty za udzielenie poprawnej odpowiedzi, odejmujesz za wywołanie podpowiedzi... koniec zadania?

0

Może i łatwe jak się już umie w całości pythona, jeszcze nie doszedłem do rozdziału z instrukcjami break.

0
Pijany Mleczarz napisał(a):

Może i łatwe jak się już umie w całości pythona, jeszcze nie doszedłem do rozdziału z instrukcjami break.

nie ściemniaj :P break masz na stronie 87 a zadanie jest ze 132 xD
u mnie (na podstawie materiałów z książki) program wygląda tak:

import random as rm

SLOWA = ("Rick",
         "Morty",
         "Pan Miszczuk")

zgadka = rm.choice(SLOWA)

poprawne = zgadka

pomieszane = ""

while zgadka:
    pozycja = rm.randrange(len(zgadka))
    pomieszane += zgadka[pozycja]
    zgadka = zgadka[:pozycja] + zgadka[(pozycja + 1):]

print("Zaczynamy gre")
print("Zgadnij co to za zwrot: ",pomieszane)

gosc = input ("zgaduj: ")
x=0
z=0
p = ""
while gosc != poprawne and gosc != "":
    print("to nie to")
    x+=1
    if x>=3:
        print("Nie udało Ci się zgadnąć w 3 ruchach")
        p = str(input("Potrzebujesz pomocy? Jeśli tak naciśnij t, jeśli wolisz zgadywać bez podpowiedzi naciśnij n: "))
        if p == "y":
            print("pierwsze dwie litery to: ",poprawne[:2])
            z+=1
        elif p == "n":
            print("ok zgaduj dalej")
    gosc = input("spróbuj jeszcze raz: \n")
            
            
if gosc == poprawne and z==0:
    print ("brawo Ty, zgadłeś sam i otrzymujesz 3ptk")
elif gosc == poprawne and z==1:
    print ("brawo udało Ci się ale z podpowiedzią... Otrzymujesz tylko 2ptk")
elif gosc == poprawne and z>=2:
    print ("no cóż nie poszło Ci najlepiej i mimo podpowiedzi nie zgadłeś odrazu, otrzymujesz 1ptk")

print("Dziękuję za udział w grze.")
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.