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

如何修正Python代码以生成指定格式的自定义标尺?

问题描述

我想用Python的print函数生成标尺,当输入值为5时,标尺应呈现如下样式:

第一行全为空格,第二行依次显示1 2 3 4 5,第三行对应长度的分隔符号(如-----)

我尝试修改代码将数字替换为符号,当前代码如下:

length = str(input("Enter the ruler length = "))


def ruler(string):
    top = []
    top_out = []
    bottom = []
 
    for i in range(length):
        top.append((i+1)//10)
        bottom.append((i+1)%10)
        for i in range(length):
            if ((i+1)//10) == 0:
                top_out.append(" ")
            elif (((i+1)//10) in list(sorted(set(top)))) and (((i+1)//10) not in top_out):
                top_out.append(((i+1)//10))
            else:
                top_out.append(" ")
                print (''.join(list(map(str, top_out))))
                print (''.join(list(map(str,bottom))))
                print (string)

请问如何修正这段代码,以得到符合要求的标尺输出格式?


修正方案

你的代码存在类型错误、循环逻辑混乱、打印时机错误等问题,以下是修正后的代码:

def ruler(length, symbol):
    # 构建十位数字行:仅在十位变化的起始位置显示数字,其余留空
    top_line = []
    for i in range(1, length + 1):
        ten_digit = i // 10
        if ten_digit != 0 and i % 10 == 1:
            top_line.append(str(ten_digit))
        else:
            top_line.append(" ")
    
    # 构建个位数字行:用空格分隔数字,处理10的显示
    bottom_line = []
    for i in range(1, length + 1):
        digit = i % 10
        bottom_line.append("10" if digit == 0 else str(digit))
    
    # 构建符号分隔行
    symbol_line = symbol * length

    # 按顺序打印标尺的三行
    print(''.join(top_line))
    print(' '.join(bottom_line))
    print(symbol_line)

# 获取合法输入并调用函数
try:
    length = int(input("Enter the ruler length = "))
    if length <= 0:
        print("请输入正整数")
    else:
        # 可替换为你需要的符号,比如'-'、'='等
        ruler(length, '-')
except ValueError:
    print("请输入有效的整数")

关键修正点

  • 类型修复:将输入的长度转为整数,避免range()参数类型错误
  • 循环逻辑重构:拆分嵌套循环,分别构建每一行内容,避免逻辑混乱
  • 标尺样式优化:个位数字用空格分隔,十位数字仅在必要位置显示,符合常规标尺设计
  • 输入校验:增加异常处理和合法性检查,提升代码健壮性

当输入为5时,输出效果如下:

1 2 3 4 5
-----

内容的提问来源于stack exchange,提问作者Malum Phobos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:10:38