Проверка наличия файла и загрузка его содержимого - PullRequest
0 голосов
/ 07 декабря 2018

В моем классе по программированию мы должны сделать игру «Камень, бумага, ножницы», которая может загрузить предыдущие сохранения игры, отобразить статистику игры и позволить пользователю продолжить игру, если это необходимо.У меня есть хороший кусок созданной программы, мне просто нужна помощь с загрузкой файла, поскольку я просто получаю бесконечный цикл «Как тебя зовут?».Мой код ниже, и любая помощь будет оценена!

#Rock, Paper, Scissors Program
#A menu-based RPS program that keeps stats of wins, losses, and 
ties
#12/2/18

import sys, os, random, pickle

#Functions
def print_menu():
    print("\n1. Start New Game")
    print("2. Load Game")
    print("3. Quit")

def print_roundmenu():
    print("What would you like to do?")
    print("\n1. Play Again")
    print("2. View Statistics")
    print("3. Quit")

def start_game(username, playing):
    print("Hello", username + ".", "let's play!")
    playAgain = play_game()
    if playAgain == True:
        playing = True
    elif playAgain == False:
        playing = False
    return playing

def play_game():
    roundNo = 1
    wins = 0
    losses = 0 
    ties = 0
    playing_round = True

    while playing_round:
        print("Round number", roundNo)
        print("1. Rock")
        print("2. Paper")
        print("3. Scissors")

        roundNo += 1
        choices = ["Rock", "Paper", "Scissors"]
        play = get_choice()
        comp_idx = random.randrange(0,2)
        comp_play = choices[comp_idx]
        print("You chose", play, "the computer chose", 
 comp_play+".")

        if (play == comp_play):
            print("It's a tie!")
            ties += 1
            print_roundmenu()
            gameFile.write(str(ties))
        elif (play == "Rock" and comp_play == "Scissors" or play == "Paper" and comp_play == "Rock" or play == "Scissors" and comp_play == "Paper"):
            print("You win!")
            wins += 1
            print_roundmenu()
            gameFile.write(str(wins))
        elif (play == "Scissors" and comp_play == "Rock" or play == "Rock" and comp_play == "Paper" or play == "Paper" and comp_play == "Scissors"):
            print("You lose!")
            losses += 1
            print_roundmenu()
            gameFile.write(str(losses))
        response = ""
        while response != 1 and response != 2 and response != 3:
            try:
                response = int(input("\nEnter choice: "))
            except ValueError:
                print("Please enter either 1, 2, or 3.")
        if response == 1:
            continue
        elif response == 2:
            print(username, ", here are your game play statistics...")
            print("Wins: ", wins)
            print("Losses: ", losses)
            print("Ties: ", ties)
            print("Win/Loss Ratio: ", wins, "-", losses)
            return False
        elif response == 3:
            return False

def get_choice():
    play = ""
    while play != 1 and play != 2 and play != 3:
        try:
            play = int(input("What will it be? "))
        except ValueError:
            print("Please enter either 1, 2, or 3.")
    if play == 1:
         play = "Rock"
    if play == 2:
        play = "Paper"
    if play == 3:
        play = "Scissors"
    return play

playing = True
print("Welcome to the Rock Paper Scissors Simulator")
print_menu()
response = ""
while playing:
    while response != 1 and response != 2 and response != 3:
        try:
            response = int(input("Enter choice: "))
        except ValueError:
            print("Please enter either 1, 2, or 3.")
    if response == 1:
        username = input("What is your name? ")
        gameFile = open(username + ".rps", "w+")
        playing = start_game(username, playing)
    elif response == 2:
        while response == 2:
            username = input("What is your name? ")
            try:
                gameFile = open("username.rps", "wb+")
                pickle.dump(username, gameFile)
            except IOError:
                print(username + ", your game could not be found.")
    elif response ==3:
        playing = False

1 Ответ

0 голосов
/ 07 декабря 2018

Этот блок кода:

    while response == 2:
        username = input("What is your name? ")
        try:
            gameFile = open("username.rps", "wb+")
            pickle.dump(username, gameFile)
        except IOError:
            print(username + ", your game could not be found.")

будет повторяться бесконечно, если вы не установите для response значение, отличное от 2.Здесь обратите внимание, что все, что вы делаете в этом блоке, это (1) запрос имени пользователя, (2) открытие файла и (3) сброс содержимого файла с помощью pickle.Вы на самом деле не запускаете игру, как в блоке if response == 1.Так что та же самая подсказка повторяется бесконечно.

В этих ситуациях хорошо бы вручную пройтись по коду - «что я сделал, чтобы попасть сюда, и что происходит в результате этого».? "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...