Python: удаление n-го символа в консоли - PullRequest
0 голосов
/ 11 мая 2018

пример выходной оценки pi:

3.13658765

тогда приходит новая лучшая оценка. Скажем, 3.1416232.

Итак, я нахожу первый символ в старой оценке, который не соответствует новой. В данном случае это 4-й символ.

Вопрос: Есть ли способ удалить 4-й символ в консоли (и затем повторять это до тех пор, пока не исчезнут все символы после 3.1), чтобы я мог затем напечатать новые, лучшие значения для каждого из этих символов?

Примечание: я не хочу удалять все и консоль, а затем перепечатывать, поскольку это будет значительно медленнее с увеличением количества цифр.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Звучит так, будто вы хотите что-то вроде:

best_est = None
while True:
    est = some_estimate_method() # assuming this is a 'str'
    if not best_est:
        best_est = est
    else:
        if (float(est) > float(best_est)):
            best_est = est
    print(best_est, end = '\r')''

В зависимости от направленного отношения оценки (т. Е. Меньше или лучше), вам придется изменить неравенство, чтобы приспособиться.

Однако, если мы посмотрим на ваш пример:

# initial print
3.13658765
# get new estimate (3.1416232)
# overwrite the print
3.1416232

Изначально вы хотели «перепечатать» 3.1, а затем распечатать все новые символы в новой оценке. Напрашивается вопрос почему бы просто не напечатать всю новую оценку?

Поскольку все значение новой оценки больше, это означает, что искомое сравнение (начиная с индекса 4 и выше) уже проверено при использовании < или > для неравенства. Простой вызов print(est, end = '\r') возвращает курсор консоли в начало строки, каждый раз фактически перезаписывая значение.

0 голосов
/ 11 мая 2018

Если вам просто нужно перезаписать вашу последнюю строку, вы можете сделать что-то вроде этого. «\ R» означает, что вместо новой строки будет напечатана возвратная каретка, возвращающая вас к началу той же строки для перезаписи

print("3.1515", end="\r")
print("3.1415")

Кроме того, если вы хотите делать сложные вещи, вы можете посмотреть управляющие коды ANSI, они позволят вам печатать в любом произвольном месте, хотя они и не являются наиболее переносимыми. Это также позволит вам делать забавные вещи, такие как установка цвета.

Например, print("\033[31;1HX") напечатает X в столбце 31 и 1-й строке. Чтобы удалить символ, вы можете просто напечатать пробел сверху (print("\033[31;1H ")).

Это может работать не на всех терминалах

http://ascii -table.com / ANSI-спусковое sequences.php

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