如何修正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
相关产品推荐
相关产品推荐

