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

Aruba Cloud - Virtual Private Server VPS
0 głosów
402 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 (256,600 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ź 131 wizyt
0 głosów
1 odpowiedź 250 wizyt
pytanie zadane 17 listopada 2022 w Python przez dedek2 Początkujący (370 p.)
0 głosów
2 odpowiedzi 508 wizyt
pytanie zadane 16 września 2022 w Python przez kacper1445 Mądrala (5,050 p.)

93,326 zapytań

142,323 odpowiedzi

322,391 komentarzy

62,655 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...