如何将生成5x5星型字符图案的函数与输入循环整合
整合星型图案生成与输入循环,并支持后续扩展全部字母
一、代码整合步骤及完整实现
原代码存在全局变量依赖、耦合性高的问题,我们通过重构让代码模块化,完成输入循环与图案生成的整合:
1. 重构图案生成函数
去掉全局变量依赖,改为接收输入单词作为参数,返回每个字母的图案列表:
def generate_letter_patterns(word): letter_patterns = [] for char in word.upper(): # 兼容小写输入 if char == "B": pattern = [[" " for _ in range(5)] for _ in range(5)] for row in range(5): for col in range(5): if (col == 0) or (col == 4 and row not in {0, 2, 4}) or ((row in {0, 2, 4}) and 0 < col < 4): pattern[row][col] = "*" letter_patterns.append(pattern) elif char == "A": pattern = [[" " for _ in range(5)] for _ in range(5)] for row in range(5): for col in range(5): if (row == 0 and 1 < col < 3) or \ (row == 1 and (0 < col < 2 or 2 < col < 4)) or \ (row == 2) or \ ((row in {3, 4}) and (col == 0 or col == 4)): pattern[row][col] = "*" letter_patterns.append(pattern) elif char == "L": pattern = [[" " for _ in range(5)] for _ in range(5)] for row in range(5): for col in range(5): if col == 0 or (row == 4 and col > 0): pattern[row][col] = "*" letter_patterns.append(pattern) return letter_patterns
2. 抽离图案打印函数
将打印逻辑单独封装,接收图案列表完成输出:
def print_pattern(patterns): for row in range(5): for pattern in patterns: print(" ".join(pattern[row]), end=" ") print()
3. 完善输入循环与主函数
结合原有输入收集逻辑,在主函数中串联生成与打印流程:
def information_gathering_phase(): while True: word = input("Enter a word from the letters 'B', 'A' and/or 'L' (or type 'stop' to stop the program): ") if word.lower() == 'stop': # 兼容大写输入 return None elif not all(letter.upper() in 'BAL' for letter in word): print("Invalid word! Please try again...") else: return word def main(): while True: word = information_gathering_phase() if word is None: print("Thanks for trying my program...Bye for now!") break else: patterns = generate_letter_patterns(word) print_pattern(patterns) if __name__ == '__main__': main()
核心改动说明
- 移除全局变量,通过参数传递数据,降低代码耦合
- 增加大小写兼容,用户输入小写字母或
STOP均可正常响应 - 拆分生成与打印逻辑,代码结构更清晰,便于后续修改
二、后续扩展支持全部字母的方案
要支持所有26个字母,推荐用字典映射字母到图案模板的方式,避免冗余的if-elif分支:
1. 定义字母图案模板
直接用字符串列表定义每个字母的5x5图案,直观易懂:
LETTER_TEMPLATES = { "A": [ " * ", "* *", "*****", "* *", "* *" ], "B": [ "**** ", "* *", "**** ", "* *", "**** " ], "L": [ "* ", "* ", "* ", "* ", "*****" ], # 在此处添加其他字母的模板即可完成扩展 }
2. 简化生成函数
基于模板字典,生成函数可以大幅简化:
def generate_letter_patterns(word): letter_patterns = [] for char in word.upper(): # 若字母未定义模板,返回空白5x5图案 pattern = LETTER_TEMPLATES.get(char, [" "]*5) letter_patterns.append(pattern) return letter_patterns
3. 适配打印函数
使用字符串模板后,打印逻辑可以更简洁:
def print_pattern(patterns): for row in range(5): for pattern in patterns: print(pattern[row], end=" ") print()
这种方案的优势:
- 新增字母仅需在
LETTER_TEMPLATES中添加模板,无需修改核心逻辑 - 图案定义直观,便于调试和调整样式
- 代码结构简洁,可读性与可维护性更高
内容的提问来源于stack exchange,提问作者StarryNight
相关产品推荐
相关产品推荐

