
本文讲解如何通过字典建立数字与颜色字符串的映射关系,结合 input() 获取用户输入,并安全校验、转换为对应颜色名称与样式,避免硬编码和索引越界风险。
本文讲解如何通过字典建立数字与颜色字符串的映射关系,结合 `input()` 获取用户输入,并安全校验、转换为对应颜色名称与样式,避免硬编码和索引越界风险。
在 Python 中,若需让用户输入数字(如 "1")并准确对应到特定颜色字符串(如 "Red"),直接依赖列表索引(如 words[0])存在隐患:一旦菜单顺序、颜色集合或用户输入逻辑变动,极易引发 IndexError 或语义错配。更健壮、可维护的方案是使用 字典(dict)显式定义数字 → 颜色名称 → ANSI 样式的三层映射。
以下是一个完整、可运行的教程示例:
✅ 推荐实现:结构化字典映射
import random
from colorama import init, Fore
init() # 确保 Windows 下颜色正常生效
# ✅ 步骤1:定义「数字→颜色名→颜色样式」的权威映射(键为颜色名,值为对应 Fore.*)
color_map = {
"Red": Fore.RED,
"Green": Fore.GREEN,
"Blue": Fore.BLUE,
"Yellow": Fore.YELLOW,
"Magenta": Fore.MAGENTA,
"Cyan": Fore.CYAN,
"Light Blue": Fore.LIGHTBLUE_EX,
}
# ✅ 步骤2:生成带编号的彩色菜单(自动适配字典内容)
print(random.choice(list(color_map.values())) + "Type the number, not the color!\n" + Fore.RESET)
for i, (color_name, color_style) in enumerate(color_map.items(), start=1):
print(color_style + f"{i} = {color_name}" + Fore.RESET)
# ✅ 步骤3:获取并验证用户输入
try:
user_input = input("\nYour choice (1–{}): ".format(len(color_map))).strip()
choice_num = int(user_input)
# ✅ 安全校验:检查是否为有效数字索引
if 1 <= choice_num <= len(color_map):
# 通过索引反查颜色名(将字典转为有序列表)
selected_color = list(color_map.keys())[choice_num - 1]
selected_style = color_map[selected_color]
print(f"\n✅ You chose: {selected_style}{selected_color}{Fore.RESET}")
print(f"? Tip: This maps to style {repr(selected_style)}")
else:
print(f"{Fore.RED}❌ Error: Please enter a number between 1 and {len(color_map)}.{Fore.RESET}")
except ValueError:
print(f"{Fore.RED}❌ Error: Invalid input. Please enter a number.{Fore.RESET}")
except KeyboardInterrupt:
print(f"\n{Fore.YELLOW}? Goodbye!{Fore.RESET}")? 关键设计说明
- 字典作为单一数据源:color_map 同时承载颜色名与样式,消除列表与索引脱节风险;
- enumerate(..., start=1):自动生成 1-based 编号菜单,无需手动维护 1="Red" 等硬编码;
- 输入强校验:检查是否为整数、是否在合法范围内,避免崩溃;
- list(dict.keys()) 安全索引:因字典在 Python 3.7+ 保持插入顺序,可放心按位置取值;
- Fore.RESET 及时重置:防止后续终端输出被残留颜色影响。
⚠️ 注意事项
- 若需支持动态增删颜色,只需修改 color_map 字典,其余逻辑自动适配;
- 不要混用 startcolor = [Fore.RED, ...] 和独立 words = ["Red", ...] —— 这会造成两套维护体系,极易不同步;
- 生产环境建议将颜色映射封装为函数或类,提升复用性与测试性。
通过这种字典驱动的设计,你不仅实现了“输入数字 → 匹配颜色字符串”的核心需求,更构建了清晰、可扩展、易调试的交互逻辑——这才是 Python 式的优雅解法。

















