【问题标题】:How to print() output to previous line after input输入后如何打印()输出到上一行
【发布时间】:2019-02-02 01:12:03
【问题描述】:
for i in range(1, 10):
    print('temp {}: '.format(i), end = '')
    temp = float(input(''))
    print(' Celsius = {} Fahrenheit'.format(9 / 5 * temp + 32))

输出是:

temp 1: 0
Celsius = 32 Fahrenheit
temp 2: 5
Celsius = 41 Fahrenheit

我想在上一行打印'Celsius =...'。

我想输出的是:

temp 1: 0 Celsius = 32 Fahrenheit
temp 2: 5 Celsius = 41 Fahrenheit

【问题讨论】:

  • 与您的问题无关,但正确的拼写是“Fahrenheit”
  • 这里的问题是每当你在 py3 中使用 input() 或在 py2 中使用 raw_input() 时。它读取提示并打印提示。并移至新行。如果连续使用打印语句,则在 py2 中使用“,”,在 py3 中使用 end=''。这些打印语句将打印在同一行中。但是 input() 或 raw_input() 会打印提示,然后移到 STDOUT 中的下一行。
  • 发现了一个类似的问题。 stackoverflow.com/questions/7173850/… 根据我们在/通过打印语句中使用 raw_input() 或 input() 时,我们不能在同一行打印它们。除非我们使用 Curses 模块。

标签: python python-3.x input printing


【解决方案1】:

我找到了!!!在帖子Possible to get user input... 中使用@nik-k 答案:

我在最后一行之前添加了print('\033[{}C\033[1A'.format(6 + len(str(temp))), end = '')'\033[{}(6 用于转到上一行,len(...) 用于向前移动光标)C\033[1A'

for i in range(1, 10):
    print('temp {}: '.format(i), end = '')
    temp = float(input(''))
    print('\033[{}C\033[1A'.format(6 + len(str(temp))), end = '')
    print(' Celsius = {} Fahrenheit'.format(9 / 5 * temp + 32))

【讨论】:

    【解决方案2】:

    使用input() 需要您按回车,这将添加新行。 我会先输入温度然后再打印整个x C = y F 行来解决这个问题。

    【讨论】:

    • 这个我知道,但是有什么办法可以将光标移到上一行然后打印?
    • 这是不可能的。我能想到的唯一方法是清除控制台并再次编写所有内容,这可能会产生“没有插入换行符”的感觉,但当然这不会考虑其他输出(例如目录名称和脚本名称)已运行)并且通常非常不可靠。
    • 可以将终端切换到无回显模式(如密码输入)和原始模式(逐字符输入,而不是逐行),但是您的程序将负责所有行编辑。
    【解决方案3】:

    我相信你可以使用 python 2.x:

    print('temp {}: '.format(i), end = ''),
    

    第一次打印后, 可以完成这项工作,但如果你使用的是 python 3。我建议你看看这个:

    Print new output on same line

    【讨论】:

    • 在 print() 之后不需要加逗号,并且带有 "..., end=' ' " 的这一行可以正常工作。问题出在第二行,input() 需要您按回车键,这将添加新行,我需要一种将光标移到上一行然后打印的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2021-07-10
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多