Я пишу палач.
Скрипт состоит из двух функций:
setup (), которая инициализирует все переменные (слово, количество догадок, списки проверяемых букв и т. д.) и main (что является основным игровым циклом).
Последнее, что делает setup (), это вызывает main ().
Из main () вы можете вызвать setup () для перезагрузки игры.
По своей конструкции функция main () должна обращаться к переменным, созданным в setup (), и наоборот. Это требует от меня интенсивного использования «глобальных» операторов - для всех объявлений в setup ().
Как мне подойти к нему, чтобы избежать «плохих» глобальных переменных?
import random
def setup():
with open("Ex30_Pick_a_word/sowpods.txt", "r") as f:
lines = [x for x in f.readlines()]
count = 0
for line in lines:
count += 1
global selected_word
selected_word = lines[random.randint(1, count)].rstrip()
## initialize variables
global guess_state
guess_state = ['-' for letter in selected_word]
global bad_letters
bad_letters = ""
global chances
chances = 6
## start game
print("\n\n\n#### WELCOME TO HANGMAN ###")
print("Word to guess is: " + selected_word + ".") ## debug only ;)
main()
def main():
while True:
success = False
print("\n""The word is:")
display = "".join(guess_state)
print(display)
global chances
print("You've got " + str(chances) + " chances left.")
guess_letter = input("Guess a letter:").capitalize()
## logic
for letter_id, letter in enumerate(selected_word):
if guess_letter == letter: ## if found
if guess_state[letter_id] == "-": ## if not yet found
guess_state[letter_id] = letter
success = True
break
if not success:
global bad_letters
if guess_letter in bad_letters:
print("You've aread tried: \"" + guess_letter + "\"")
else:
bad_letters += guess_letter + " "
chances -= 1
if ''.join(guess_state) == selected_word:
print("You've won, the word was: " + selected_word)
again = input("Do you want to play again? (y/n)")
if again == "y":
setup()
break
if len(bad_letters) > 0:
print("\nBad letters: " + bad_letters)
if chances == 0:
print("Game Over.")
again = input("Do you want to play again? (y/n)")
if again == "y":
setup()
break
setup()