Очистка экрана в Python Shell - PullRequest
0 голосов
/ 16 марта 2020

В настоящее время я делаю программу памяти, и моя программа высвечивает пользовательские слова, чтобы они их запомнили. Затем отступ в 100 строк для очистки экрана в python оболочке. Мне было интересно, есть ли альтернатива, где пользователь не может прокрутить назад и посмотреть на слова, показанные ранее.

Под моей программой есть способ очистить экран, прокрутив несколько строк, но это не очень хорошо работает и не очень удобно для пользователя.

import time
import random


#Number List
sequenceWords = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth",
                 "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth"]

#Functions
def easy():
    wordList = ["dog", "house", "food", "ice", "rich", "school", "team", "walk", "mice", "car", "airplane", "internet", "big", "red",
            "snow","wow", "lose", "run", "line", "duck", "bike", "land", "hill", "bad", "simple", "clock", "virus", "game", "sign", "end"]
    print()
    print("Okay! Welcome to the easiest mode.")
    time.sleep(2)
    print("You will be given five words and must try to remember them in order:")
    time.sleep(3)
    print("Ready")
    time.sleep(1)
    print("Set")
    time.sleep(1)
    print("REMEMBER!")
    time.sleep(0.5)
    wordsToGuess = []
    for i in range(0,5):
        wordsToGuess.append(random.choice(wordList))
        wordList.remove(random.choice(wordList))
    print(wordsToGuess)
    time.sleep(4)
    print(("\n") * 100)
    print("Let's see how good your memory really is")
    return wordsToGuess

def rightEasy(wordsToGuess):
    for n,word in enumerate(wordList):
        guess = input("What was the " + sequenceWords[n] + " word: ")
        if guess.lower() == wordsToGuess[n]:
            print("Congratulations! You got the " + sequenceWords[n] + " word right. ")
            print()
        else:
            print("Wrong answer. Better luck next time.")
            return

#Main Program
print("Welcome to my memory game!")
time.sleep(2)
replay = input("""
Enter C to continue playing or any other key to exit: """)
while replay.upper() == "C":
    level = input("""
This game will test how good you are at remembering words.
There are three modes: Easy, Medium, or Hard.
Enter E for Easy, M for Medium, or H for Hard:  """)
    if level.upper() == "E": 
        wordList = easy()
        rightEasy(wordList)
    elif level.upper() == "M":
        wordList = medium()
        rightMedium(wordList)
    elif level.upper() == "H":
        wordList = hard()
        rightHard(wordList)
    else:
        print("Invalid Input")
    replay = input("""
Enter C to continue playing or any other key to exit: """)
print("""Thanks for playing.

GAME OVER""")



Ответы [ 4 ]

2 голосов
/ 16 марта 2020

При выполнении этого кода:

wordsToGuess.append(random.choice(wordList))
wordList.remove(random.choice(wordList))

вы добавляете случайное слово в wordsToGuess и удаляете другое случайное слово (отличное от первого) из вашего списка.

Самое простое решение вашей проблемы - использовать random.sample(population,k) для выбора элементов из списка без замены. Вы можете взглянуть на документацию для этого здесь .

Теперь это выглядит так:

def easy():
    wordList = ["dog", "house", "food", "ice", "rich", "school", "team", "walk", "mice", "car", "airplane", "internet", "big", "red",
            "snow","wow", "lose", "run", "line", "duck", "bike", "land", "hill", "bad", "simple", "clock", "virus", "game", "sign", "end"]
    print()
    print("Okay! Welcome to the easiest mode.")
    time.sleep(2)
    print("You will be given five words and must try to remember them in order:")
    time.sleep(3)
    print("Ready")
    time.sleep(1)
    print("Set")
    time.sleep(1)
    print("REMEMBER!")
    time.sleep(0.5)
    wordsToGuess = random.sample(wordList, 5)
    print(wordsToGuess)
    time.sleep(4)
    print(("\n") * 100)
    print("Let's see how good your memory really is")
    return wordsToGuess
1 голос
/ 16 марта 2020

Это "fla sh" значений на экране и не распечатывает их все вместе в списке. Я также добавил задержку в 1/2 секунды между отпечатками, чтобы выглядеть лучше.

import time
import random

def easy():
    word_list = ["dog", "house", "food", "ice", "rich", "school", "team", "walk", "mice", "car", "airplane", "internet", "big", "red",
                 "snow","wow", "lose", "run", "line", "duck", "bike", "land", "hill", "bad", "simple", "clock", "virus", "game", "sign", "end"]
    print()
    print("Okay! Welcome to the easiest mode.")
    time.sleep(2)
    print("You will be given five words and must try to remember them in order:")
    time.sleep(3)
    print("Ready")
    time.sleep(1)
    print("Set")
    time.sleep(1)
    print("REMEMBER!")
    time.sleep(0.5)

    words_to_guess = []
    for i in range(5):
        word = random.choice(word_list)
        words_to_guess.append(word)
        time.sleep(0.5)
        word_list.remove(word)
        print(words_to_guess[i])
    time.sleep(4)
    print(("\n") * 100)
    print("Let's see how good your memory really is")

    return words_to_guess

Хотя остальной части кода я не видел. я предполагаю easy режим игры, но зачем так быстро его заканчивать? Возможно, вы могли бы вместо того, чтобы возвращать список words_to_guess, попросить пользователя ввести слова и дать ему время напечатать, вероятно, в теме или что-то в этом роде.

Не ответ, скорее как предложение:

import time
import random
import threading

def counter(time):
    time.sleep(time)

def get_input(words: int, time: float):
    word_list = []
    print("You will have {} seconds to write all the words you remember!".format(time))
    time.sleep(2)
    print("Start!")
    countdown = threading.Thread(target=counter, args=time)
    countdown.start()

    while countdown.isAlive():
        if words > 0:
            word = input("Write the words!\n")
            word_list.append(word)
            words -= 1
        else:
            break
    return word_list


def easy():
    word_list = ["dog", "house", "food", "ice", "rich", "school", "team", "walk", "mice", "car", "airplane", "internet", "big", "red",
                 "snow","wow", "lose", "run", "line", "duck", "bike", "land", "hill", "bad", "simple", "clock", "virus", "game", "sign", "end"]
    print()
    print("Okay! Welcome to the easiest mode.")
    time.sleep(2)
    print("You will be given five words and must try to remember them in order:")
    time.sleep(3)
    print("Ready")
    time.sleep(1)
    print("Set")
    time.sleep(1)
    print("REMEMBER!")
    time.sleep(0.5)

    words_to_guess = []
    for i in range(5):
        word = random.choice(word_list)
        words_to_guess.append(word)
        time.sleep(0.5)
        word_list.remove(word)
        print(words_to_guess[i])
    time.sleep(4)
    print(("\n") * 100)
    print("Let's see how good your memory really is")

    words = get_input(5, 10)  # this will give the user 10 seconds to write 5 words
    wrongs = []
    for i in range(words):
        if words[i] != words_to_guess[i]:
            wrongs.append(i)
    if wrongs:
        print("You made {} mistakes:\n".format(len(wrongs)))
        for i in range(wrongs):
            print("{}) You wrote '{}'. The word was ''".format(i, wrongs[i], words_to_guess[i]))
    else:
        print("Nice! You made no mistakes!")

Я не запускал его, но он мог бы работать: P

Кстати, лучший метод в python - использовать случай со змеей ( snake_case ) для variable имен и function имен. Вы можете использовать чехол для верблюда ( camelCase ), но только для class имен

1 голос
/ 16 марта 2020

wordList.remove(random.choice(wordList)) -> Я предполагаю, что эта строка предназначена для удаления слова, которое было выбрано случайным образом, из строки над ним, чтобы оно не повторялось, но на самом деле вы просто указываете программе удалить случайный элемент из списка , независимо от того, который был ранее выбран.

word = random.choice(wordList)
wordsToGuess.append(word)
wordList.remove(word)
0 голосов
/ 16 марта 2020

Я думаю, что вы используете эту функцию в al oop или что-то, что повторяет функцию, если вам нужно, вам нужно вывести список из функции. потому что каждый раз, когда вы вызываете его, он делает один и тот же список снова и снова.

...