如何让Python 3中input()输入时不自动换行
解决方案
要实现多轮输入姓名且所有输入内容保持在同一行的效果,核心是通过ANSI终端控制序列调整光标位置并覆盖当前行内容,替代默认的换行行为。以下是修改后的代码:
import sys import os # 启用Windows终端的ANSI转义序列支持(如果是Windows系统) if os.name == 'nt': os.system('') done = False custlog = [] prompt = "Enter a name (John D) or DONE\n----------\n" print(prompt, end='') while not done: # 读取输入并去除首尾空格,转为大写 usrinput = input().strip().upper() if usrinput != "DONE": custlog.append(usrinput) # 1. 光标回到上一行开头;2. 清除当前行从光标到行尾的内容 print("\033[F\033[K", end='') # 打印所有已输入的姓名,用空格分隔,不换行 print(' '.join(custlog), end='') # 强制刷新输出缓冲区,确保内容立即显示 sys.stdout.flush() else: # 输入DONE后,将其加入列表并最终打印整行 custlog.append("Done") print("\033[F\033[K", end='') print(' '.join(custlog)) done = True print("----------\n#finish code")
关键逻辑说明
- ANSI转义序列:
\033[F将光标移动到上一行开头,\033[K清除光标到行尾的内容,实现对输入行的覆盖更新。 - 列表维护输入内容:用
custlog存储所有输入的姓名,每次新增后重新打印整行内容,确保所有输入在同一行显示。 - 输出缓冲刷新:
sys.stdout.flush()避免终端缓冲导致的显示延迟,确保输入后立即更新行内容。
效果验证
运行后输入流程如下:
- 初始提示后,输入
Adam B并回车,终端会在同一行显示Adam B,光标停在行尾等待下一次输入。 - 输入
Bob D并回车,同一行更新为Adam B Bob D。 - 输入
DONE并回车,行内容更新为Adam B Bob D Done,随后换行显示后续结束内容,完全符合期望效果。
内容的提问来源于stack exchange,提问作者Joshua Brenneman
相关产品推荐
相关产品推荐

