Python input()函数截断长输入的编程竞赛解决方案问询
解决Python控制台超长输入截断问题
问题原因
input()函数默认按行读取输入,且受限于终端输入缓冲区大小(通常为16KB左右),当粘贴的超长输入超过缓冲区容量时,会被截断,剩余内容无法通过后续input()调用获取。
解决方案
直接读取标准输入的全部内容,而非逐行读取,同时可实现类似Java Scanner的next()功能。所有方案均基于Python标准库,无需额外安装依赖。
1. 读取全部输入内容
使用sys.stdin.read()一次性获取所有控制台输入,不受缓冲区限制:
import sys full_input = sys.stdin.read() print(f"输入总长度: {len(full_input)}")
2. 逐字符处理输入
遍历读取到的全部输入内容,实现逐字符处理:
import sys for char in sys.stdin.read(): # 这里添加你的字符处理逻辑 print(char, end='')
3. 实现类似Java Scanner的next()功能
按空白符(空格、换行、制表符等)分割输入,逐个获取token:
import sys # 分割所有输入为token列表 all_tokens = sys.stdin.read().split() # 逐个获取token,模拟next() for token in all_tokens: print(f"当前token: {token}")
或者用生成器实现按需获取,节省内存:
import sys import itertools def scanner_next(): # 逐行读取并分割,链式生成所有token tokens = itertools.chain.from_iterable(line.split() for line in sys.stdin) yield from tokens # 使用示例 scanner = scanner_next() while True: try: token = next(scanner) print(f"获取到token: {token}") except StopIteration: break
内容的提问来源于stack exchange,提问作者Judson Birkel
相关产品推荐
相关产品推荐

