Python骰子ASCII图代码无输出求助:水平打印功能失效
骰子ASCII图输出异常问题
我在代码中定义了骰子的ASCII图案,第一部分已实现生成1-6随机数模拟掷骰子,但第二部分的for循环无法正常工作,没有任何输出,无法根据掷出结果水平打印骰子图。
原代码
import random def roll_dice(num_of_dice=1): """ Rolls dice based on num_of_dice passed as an argument. Arguments: - num_of_dice: Integer for amount of dice to roll Returns the following tuple: (rolls, display_string) - rolls: A list of each roll result as an int - display_string: A string combining the dice art for all rolls into one string """ die_art = { 1: ["┌─────────┐", "│ │", "│ ● │", "│ │", "└─────────┘"], 2: ["┌─────────┐", "│ ● │", "│ │", "│ ● │", "└─────────┘"], 3: ["┌─────────┐", "│ ● │", "│ ● │", "│ ● │", "└─────────┘"], 4: ["┌─────────┐", "│ ● ● │", "│ │", "│ ● ● │", "└─────────┘"], 5: ["┌─────────┐", "│ ● ● │", "│ ● │", "│ ● ● │", "└─────────┘"], 6: ["┌─────────┐", "│ ● ● │", "│ ● ● │", "│ ● ● │", "└─────────┘"] } rolls = [] for i in range(num_of_dice): r = random.randint(1, 6) rolls.append(r) display_string = "" for roll in rolls: for line in die_art[roll]: if die_art[roll] == rolls: display_string.append(die_art[line]) return(rolls, display_string) result = roll_dice() print(result[0]) print(result[1])
问题分析
- 逻辑判断无效:
if die_art[roll] == rolls永远不成立,die_art[roll]是对应骰子的5行字符串列表,rolls是掷出的数字列表,两者类型、内容完全不匹配,导致内部代码从未执行 - 字符串操作错误:
display_string是字符串类型,没有append()方法,字符串拼接应使用+= - 排列逻辑错误:要水平展示多个骰子,需要按行拼接——先取所有骰子的第一行拼在一起,再取第二行,以此类推,而不是逐个骰子输出所有行
修复后的代码
import random def roll_dice(num_of_dice=1): """ 掷骰子函数,根据传入的骰子数量生成随机结果并返回骰子ASCII图 参数: - num_of_dice: 要掷的骰子数量,整数类型 返回元组: (rolls, display_string) - rolls: 每个骰子的结果列表,元素为整数 - display_string: 拼接所有骰子ASCII图的字符串 """ die_art = { 1: ["┌─────────┐", "│ │", "│ ● │", "│ │", "└─────────┘"], 2: ["┌─────────┐", "│ ● │", "│ │", "│ ● │", "└─────────┘"], 3: ["┌─────────┐", "│ ● │", "│ ● │", "│ ● │", "└─────────┘"], 4: ["┌─────────┐", "│ ● ● │", "│ │", "│ ● ● │", "└─────────┘"], 5: ["┌─────────┐", "│ ● ● │", "│ ● │", "│ ● ● │", "└─────────┘"], 6: ["┌─────────┐", "│ ● ● │", "│ ● ● │", "│ ● ● │", "└─────────┘"] } rolls = [] for _ in range(num_of_dice): rolls.append(random.randint(1, 6)) display_string = "" # 遍历骰子的每一行索引(每个骰子固定5行) for line_idx in range(5): # 遍历每个掷出的结果,拼接对应行的内容 for roll in rolls: display_string += die_art[roll][line_idx] + " " # 每一行拼接完后换行 display_string += "\n" # 去掉最后多余的换行 display_string = display_string.rstrip("\n") return rolls, display_string # 测试:掷2个骰子 result = roll_dice(2) print("掷出结果:", result[0]) print("骰子图:") print(result[1])
修复说明
- 按行索引遍历,确保所有骰子的同一行被拼接在一起,实现水平排列
- 使用
+=进行字符串拼接,符合字符串操作规范 - 移除了无效的判断条件,直接执行拼接逻辑
- 增加了中文注释,优化可读性
内容的提问来源于stack exchange,提问作者lli
相关产品推荐
相关产品推荐

