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

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])

问题分析

  1. 逻辑判断无效:if die_art[roll] == rolls 永远不成立,die_art[roll]是对应骰子的5行字符串列表,rolls是掷出的数字列表,两者类型、内容完全不匹配,导致内部代码从未执行
  2. 字符串操作错误:display_string是字符串类型,没有append()方法,字符串拼接应使用+=
  3. 排列逻辑错误:要水平展示多个骰子,需要按行拼接——先取所有骰子的第一行拼在一起,再取第二行,以此类推,而不是逐个骰子输出所有行

修复后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:54:14