• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze zrozumieniem kodu z gry Szubienica.

VPS Starter Arubacloud
0 głosów
230 wizyt
pytanie zadane 19 listopada 2022 w Python przez dedek2 Początkujący (370 p.)

Hej, uczę się pythona z książki, i na końcu działu o słownikach jest program Szubienica, mam w nim problem, ze zrozumieniem fragmentu kodu o to kod: 

# Szubienica
#
# klasyczn gra w szubienice, komputer losowo wybiera slowo,
# a gracz proboje odgadnac jego poszczegolne litery. Jesli gracz
# nie odgarnie w pore calego slowa, maly ludzik zostaje powieszony

import random

# stałe
HANGMAN = (
"""
 ------
 |    |
 |
 |
 |
 |
 |
 |
 |
----------
""",
"""
 ------
 |    |
 |    O
 |
 |
 |
 |
 |
 |
----------
""",
"""
 ------
 |    |
 |    O
 |   -+-
 | 
 |   
 |   
 |   
 |   
----------
""",
"""
 ------
 |    |
 |    O
 |  /-+-
 |   
 |   
 |   
 |   
 |   
----------
""",
"""
 ------
 |    |
 |    O
 |  /-+-/
 |   
 |   
 |   
 |   
 |   
----------
""",
"""
 ------
 |    |
 |    O
 |  /-+-/
 |    |
 |   
 |   
 |   
 |   
----------
""",
"""
 ------
 |    |
 |    O
 |  /-+-/
 |    |
 |    |
 |   | 
 |   | 
 |   
----------
""",
"""
 ------
 |    |
 |    O
 |  /-+-/
 |    |
 |    |
 |   | |
 |   | |
 |  
----------
""")

# maxymalna liczba bledow jest o 1 mniejsza niz liczba rysunkow
MAX_WRONG = len(HANGMAN) - 1
# stala slowa
WORDS = ["GRACZ","ZIOM","MARTIN","DUPEK","NADZIEJA","TRAKTORZYSTA"]

word = random.choice(WORDS) # slowo do odgadniecia 


so_far = "-" * len(word)      # kreska zastępuje nieodgadniętą literę

wrong = 0 # liczba nietrafionych liter 

uzyte = [] # slowa juz uzyte w grze

print("Witam w grze szubienica")

while wrong < MAX_WRONG and so_far != word:
	print(HANGMAN[wrong])
	print("\nWykorzystałeś już następujące litery:\n", uzyte)
	print("\nNa razie zagadkowe słowo wygląda tak:\n", so_far)

	guess = input("\n\nWprowadź literę: ")
	guess = guess.upper()
    
	while guess in uzyte:
		print("Już wykorzystałeś literę", guess)
		guess = input("Wprowadź literę: ")
		guess = guess.upper()

	uzyte.append(guess)

	if guess in word:
		print("\nTak!", guess, "znajduje się w zagadkowym słowie!")

        # utwórz nową wersję zmiennej so_far, aby zawierała odgadniętą literę
		new = ""
		for i in range(len(word)):
			if guess == word[i]:
				new += guess
			else:
				new += so_far[i]              
		so_far = new
	else:
		print("\nNiestety literka nie wystepuje w slowie")
		wrong += 1


if wrong == MAX_WRONG:
    print(HANGMAN[wrong])
    print("\nZostałeś powieszony!")
else:
    print("\nOdgadłeś!")
    
print("\nZagadkowe słowo to", word)

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

 

Mianowicie mam problem ze zrozumieniem pętli for, napiszę może co wiem chodź mogę się mylić. 

for i in range(len(word)): - to oznacza, że iterator i, wypisze liczby od 0 do x, w zależności od tego jak długie będzie wybrane słowo, następnie mamy if guess == word[i]:, rozumiem to w ten sposób, że jeżeli podana litera jest równa literze ze słowa, ( bo to word[i] to może być np: word[0] i to oznacza literke), to następnie dodaj ją do zmiennej new, która jest pustym łańcuchem, i dalej się pogubiłem, co oznacza to else, jeżeli podana litera nie jest równa literze zawartej w słowie i nie rozumiem tego else, czy mógłby mi ktoś to wyjaśnić z góry dziękuje. 

1 odpowiedź

0 głosów
odpowiedź 19 listopada 2022 przez VBService Ekspert (251,210 p.)
edycja 19 listopada 2022 przez VBService
 
Najlepsza

for i in range(len(word)): - to oznacza, że iterator i, wypisze liczby od 0 do x

nie wypisze tylko przy każdej iteracji i przyjmie kolejną wartość z przedziału od 0 do długość wylosowanego słowa do odgadnięcia.

 

word = 'GRACZ'
len(word) = 5
range(len(word)) = range(0, 5) czyli 0,1,2,3,4

 

przykład [ on-line

import random

WORDS = ["GRACZ","ZIOM","MARTIN","DUPEK","NADZIEJA","TRAKTORZYSTA"]
word = random.choice(WORDS)

for i in range(len(word)):
    print(i, word[i])

 

co w konsekwencji pozwala nam iterować słowo do odgadnięcia litera po literze

# indeks   0 1 2 3 4
word    = 'G R A C Z' # spacje tylko dla prezentacji

 

 


do zmiennej so_far jest zapisywane tyle kresek (-) ile jest liter w odgadywanym słowie

[ on-line ]

import random

WORDS = ["GRACZ","ZIOM","MARTIN","DUPEK","NADZIEJA","TRAKTORZYSTA"]
word = random.choice(WORDS)
so_far = "-" * len(word)

for i in range(len(word)):
    print(i, word[:i+1], so_far[:i+1])

 

jeżeli zgadywana litera jest zawarta w słowie do odgadnięcia to kreska (-) jest zastępowana prawidłową literą

[ on-line ]

import random

def color(code):
    return f"\33[{code}m"

WORDS = ["TRAKTORZYSTA"]
word = random.choice(WORDS)
so_far = "-" * len(word)

l = len(word) + 1 # dla prezentacji

guess = "T"
new = ""
for i in range(len(word)):
    print(f"{i:2} ", end="")
    if guess == word[i]:
        new += guess
        
        # prezentacja
        print(word[:i] + color(31) + f"{word[i:i+1]:{l-i}}" + color(0), f"{so_far[:i+1]:{l}}", new)
    else:
        new += so_far[i]
        
        # prezentacja
        print(f"{word[:i+1]:{l}}", f"{so_far[:i+1]:{l}}", new)

 

Podobne pytania

0 głosów
1 odpowiedź 97 wizyt
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 17 listopada 2022 w Python przez dedek2 Początkujący (370 p.)
0 głosów
2 odpowiedzi 231 wizyt
pytanie zadane 16 września 2022 w Python przez kacper1445 Gaduła (4,880 p.)

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...