You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:44:51