Python星号字母打印优化:实现单词字母并排输出及输入验证
解决星号字母并排打印的方案
核心思路
原来的字母打印函数是直接逐行输出单个字母,要实现并排显示,需要:
- 重构所有字母函数,让它们返回每行的字符串列表(而非直接打印),确保每个字母的行数统一(示例中统一为5行)。
- 对输入的有效单词,收集每个字符对应的行列表。
- 按行索引遍历,把每个字母的对应行字符串拼接后逐行打印。
代码实现示例
1. 重构字母函数(返回行列表)
def get_T(): return [ "*****", " * ", " * ", " * ", " * " ] def get_O(): return [ " *** ", "* *", "* *", "* *", " *** " ] def get_Y(): return [ "* *", " * * ", " * ", " * ", " * " ] def get_N(): return [ "* *", "** *", "* * *", "* **", "* *" ] def get_B(): return [ "**** ", "* *", "**** ", "* *", "**** " ] def get_A(): return [ " *** ", "* *", "*****", "* *", "* *" ] # 建立字符到对应函数的映射 char_map = { 'T': get_T, 'O': get_O, 'Y': get_Y, 'N': get_N, 'B': get_B, 'A': get_A }
2. 输入处理与并排打印函数
def process_input(): # 保留原有输入处理逻辑:收集有效单词、去重 valid_words = set() while True: user_input = input("请输入单词(输入'q'退出):").strip().upper() if user_input == 'Q': break # 过滤仅保留支持的字符 filtered_chars = [c for c in user_input if c in char_map] if filtered_chars: valid_word = ''.join(filtered_chars) valid_words.add(valid_word) return list(valid_words) def print_word_side_by_side(word): # 获取单词中每个字符的行列表 char_lines = [char_map[c]() for c in word] # 按行拼接所有字符的对应行并打印 for row in zip(*char_lines): print(' '.join(row)) # 主执行逻辑 if __name__ == "__main__": valid_words = process_input() print("\n处理后的结果:") for word in valid_words: print(f"\n单词 {word} 的打印效果:") print_word_side_by_side(word)
关键说明
zip(*char_lines):将每个字母的行列表“转置”,每次取到所有字母的第n行,实现横向拼接的基础。' '.join(row):在字母行之间添加空格分隔,避免字符挤在一起影响可读性。- 需确保所有字母函数返回的行列表长度一致,否则
zip会自动截断到最短的行数。
内容的提问来源于stack exchange,提问作者CamarilloMike83
相关产品推荐
相关产品推荐

