如何在Python的input()函数中实现模板式填空输入?
实现带固定模板的交互式输入功能
你需要的是一个能让用户在预设模板的指定位置填空的输入工具,区别于普通input()的提示语,模板里的固定字符不可修改,输入时光标自动跳过固定内容,最终仅返回用户输入的部分。以下是基于Python的实现方案:
核心思路
- 解析输入模板,区分可输入占位符(比如你示例中的
%)和固定字符 - 在终端中实时渲染模板,光标仅停留在可输入位置
- 处理键盘输入:输入字符填充占位符,回车后提取并返回用户输入的内容
代码实现(基于curses库)
curses库可以直接控制终端的光标位置和输入输出,适合实现这种交互式功能:
import curses def template_input(stdscr, prompt, template, placeholder='%'): # 初始化界面 stdscr.clear() stdscr.addstr(prompt) prompt_len = len(prompt) # 解析模板,记录可输入位置的索引 template_chars = list(template) input_positions = [i for i, char in enumerate(template_chars) if char == placeholder] input_values = [''] * len(input_positions) current_input_idx = 0 # 当前正在编辑的占位符索引 while True: # 渲染模板:替换占位符为已输入内容或下划线(光标位置) display_template = [] input_ptr = 0 for idx, char in enumerate(template_chars): if char == placeholder: if input_ptr == current_input_idx: # 当前光标位置显示下划线(或已输入的字符) display_char = input_values[input_ptr] if input_values[input_ptr] else '_' else: display_char = input_values[input_ptr] if input_values[input_ptr] else ' ' display_template.append(display_char) input_ptr += 1 else: display_template.append(char) # 更新显示 stdscr.addstr(prompt_len, 0, ''.join(display_template)) # 移动光标到当前输入位置 cursor_pos = prompt_len + input_positions[current_input_idx] stdscr.move(stdscr.getyx()[0], cursor_pos) stdscr.refresh() # 处理键盘输入 key = stdscr.getch() if key == curses.KEY_ENTER or key in [10, 13]: # 回车确认,返回用户输入的内容(按顺序拼接) return ''.join(input_values) elif key == curses.KEY_LEFT: # 左移光标,跳过固定字符 if current_input_idx > 0: current_input_idx -= 1 elif key == curses.KEY_RIGHT: # 右移光标,跳过固定字符 if current_input_idx < len(input_positions) - 1: current_input_idx += 1 elif 32 <= key <= 126: # 可打印字符,填充当前占位符 input_values[current_input_idx] = chr(key) # 自动跳转到下一个占位符(如果当前已填充) if current_input_idx < len(input_positions) - 1: current_input_idx += 1 elif key == curses.KEY_BACKSPACE or key == 127: # 删除当前占位符的内容 input_values[current_input_idx] = '' # 使用示例 if __name__ == '__main__': result = curses.wrapper(template_input, "Date of birth: ", "%/%/%") print(f"\nYou entered: {result}")
功能说明
- 运行后,终端会显示
Date of birth: _/ /,光标停留在第一个下划线位置 - 输入数字后,光标会自动跳转到下一个占位符位置,斜杠
/无法修改 - 支持左右箭头切换输入位置,退格键删除当前位置内容
- 回车后,仅返回用户输入的字符(比如输入
20240520,返回20240520)
注意事项
- Windows系统需要先安装
windows-curses库:pip install windows-curses - 如果不需要光标自动跳转,可删除代码中自动切换下一个占位符的逻辑
- 可自定义占位符(比如用
_代替%),只需修改函数的placeholder参数
内容的提问来源于stack exchange,提问作者SSudor
相关产品推荐
相关产品推荐

