Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Python 3.x перезаписать предыдущую строку терминала

Автор вопроса: plzHalpОтветов: 2

Я написал простую программу для расчета среднего результата броска костей (довольно бессмысленно, но с чего-то надо начинать ;P):

import random, time
from random import randrange

count = 0
total = 0
one_count = 0

for x in range(10000000):
    random = randrange(1,7)
    count = count + 1
    total = total + random
    average = total / count
    percentage = one_count / count * 100
    if random == 1:
        one_count = one_count + 1
    print("the percentage of ones occurring is", percentage, "and the average outcome is", average)
#   time.sleep(1)

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

print("the percentage of ones occuring is", percentage, "and the average outcome is", average, "/// ", end="")

который выводит:

the percentage of ones occuring is 0.0 and the average outcome is 4.0 /// the percentage of ones occuring is 0.0 and the average outcome is 4.5 /// the percentage of ones occuring is 0.0 and the average outcome is 3.6666666666666665 ///

Любые идеи?

pythonoverwritecommand-prompt

Ответы

Ответ 1 · spalac24

Добавьте \r в конце. Таким образом, следующая написанная вами строка будет начинаться с начала предыдущей строки. А затем сбросить вывод, чтобы он сразу отображался.

Примечание. Если следующая строка короче, оставшиеся символы останутся.

Ответ 2 · Padraic Cunningham

используйте 1_:

for x in range(100000):
    rnd = randrange(1,7) # don't use random
    count += 1
    total = total + rnd
    average = total / count
    percentage = one_count / count * 100
    if rnd == 1:
        one_count += 1
    print("the percentage of ones occurring is {} and the average outcome is {}".format(percentage,average),end='\r')
    time.sleep(.1)

С другой стороны, использование total = total + random не очень хорошая идея, вы импортируете модуль random и используете random в качестве имени переменной.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы