Проблема с остановкой закрытия окна Python - PullRequest
0 голосов
/ 30 мая 2019

Это небольшая и очень простая программа / игра.У меня проблемы с неожиданным закрытием терминала Python до конца кода.Но в PyCharm IDE, когда я запускаю код, программа работает нормально и заканчивается только тогда, когда весь код выполнен и ввод был введен пользователем.Я не знаю, из-за ли это логики моего программирования, я все еще новичок в этом, и поэтому я знаю, что это может быть проблемой.

Я пытался использовать ввод для предотвращения окназакрытие.

input("\nPress any key to exit... ")

Как я уже говорил ранее, это похоже на работу в IDE, но не при запуске программы непосредственно из файла .py

I не хочет передать CMD или командный файл для запуска программы.Я хочу, чтобы пользователи могли запустить игру, просто нажав на файл Pycharm и запустив его через соответствующую консоль.

Вот код:

import random
inputCounter = 0
lineNumber = 0
playerNumber = 0
randomNumber = random.randint(1, 100)
win = 0
playerName = input("Please enter your name: ")


while playerNumber is not randomNumber:
    playerNumber = int(input("Please guess a whole number from 1 to 100: "))
    inputCounter += 1
    if playerNumber < randomNumber:
        print("The number you have entered is LOWER than the generated number, please try again!")
        continue
    elif playerNumber > randomNumber:
        print("The number you have entered is HIGHER than the generated number, please try again!")
print()

if inputCounter > 1:
    print("You won with {0} guesses".format(inputCounter))
else:
    print("CONGRATS! You won with 1 guess!!")


scoreList = open("Score.txt", "a",)
scoreList.write("Player: {0} | Guesses: {1}\n".format(playerName, inputCounter,))
scoreList = open("Score.txt", "r")
print("\nHere is your score list :")
for line in scoreList:
    line = line.strip()
    find = line.find(playerName)
    if find >0:
        lineNumber += 1
        score = line[line.rfind(" ")+1:]
        print("Attempt #{0} | Score: {1}".format(lineNumber, score))
input("\nPress any key to exit... ")


scoreList.close()

PyCharm IDE запускает программу до конца (выводит количество попыток и табло игрока, а затем ожидает выхода пользователя). Это то, что я хочу, чтобы при запуске приложения через консоль Python.

РЕДАКТИРОВАТЬ: Это также имеет место, если я запускаю программу через CMD через пакетфайл, я все еще хотел бы избежать этого, если это возможно

На данный момент консоль Python закрывается, как только пользователь угадывает число исправлений, не ожидая выхода ввода пользователя.Я предполагаю, что программа все еще печатает количество попыток и табло игрока, но консоль закрывается слишком быстро, чтобы пользователь мог видеть эти строки.

1 Ответ

0 голосов
/ 30 мая 2019

Хорошо, поэтому я добавил блок try-except вокруг всего кода чтения партитуры, и мне удалось зафиксировать ошибку. Однако я думаю, что может быть специфичным для моей собственной установки Python 3, поэтому вы должны использовать тот же подход и посмотреть, в чем может быть ваша проблема.

В моем случае Python 2 установлен в C:\, в то время как Python 3 включен (по некоторым причинам) C:\Users\username\AppData\Local\Programs\Python\Python36. Когда я запускал ваш код, он по умолчанию открывался с использованием Python2, и это работало нормально. Он создан и прочитан из Scores.txt, как и ожидалось.

Когда я вручную использовал Python3, он всегда падал с [Errno 13] Permission denied: 'Score.txt', что является проблемой с разрешениями. Вы, наверное, понимаете, почему я думаю, что это из-за моего местоположения установки.

В любом случае, вы можете использовать приведенный ниже код, чтобы распечатать сообщение об ошибке. Как только вы это сделаете, должно быть легко исправить любую ошибку. Остальная часть кода (включая вызов input после этого) должна оставаться прежней.

try:
    scoreList = open("Score.txt", "a",)
    scoreList.write("Player: {0} | Guesses: {1}\n".format(playerName, inputCounter,))
    scoreList = open("Score.txt", "r")
    print("\nHere is your score list :")
    for line in scoreList:
        line = line.strip()
        find = line.find(playerName)
        if find >0:
            lineNumber += 1
            score = line[line.rfind(" ")+1:]
            print("Attempt #{0} | Score: {1}".format(lineNumber, score))
except Exception as e:
    print(e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...