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

HackerRank staircase楼梯问题代码报Out Of List错误如何解决

问题背景

你在HackerRank平台解答staircase楼梯问题时提交的Python代码运行触发Out Of List错误,相关信息如下:

  • 题目要求:输入整数n,输出n行由#组成的右对齐楼梯图案,第k行包含k个#
  • 原提交代码:
#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the staircase function below.
def staircase(n):
    for i in range(0,n):
        for j in range(0,n):
            if (i + j >= n):
                print("#",end='') 
            else:
                print(" ",end='')
        print("\r")

if __name__ == '__main__':
    n = int(input())

    staircase(n)
  • 样例输入:4
  • 预期样例输出:
#
  ##
 ###
####
错误成因
  • 边界判断逻辑错误:循环中i从0开始计数对应输出的第1行,该行需要输出1个#、n-1个前置空格,正确的字符位置判断条件应为i + j >= n-1。原代码写为i + j >=n,导致第1行完全没有#、后续每行的#数量都少1个,整体输出图案向上偏移一行。
  • 换行符使用错误:每行字符输出结束后,原代码使用print("\r")做行收尾。\r是回车符,仅能将光标移动回当前行的行首,不会产生换行效果;HackerRank判题机运行在Linux环境下,仅识别\n作为行分隔符,最终所有输出内容会被拼接成一整行。判题程序会按换行符拆分输出为列表,和预期的n行结果做逐行比对,此时实际输出列表长度仅为1,访问不存在的列表索引就会触发Out Of List(列表索引越界)错误。
修复方案

最小改动修正原有逻辑

仅需修改两处即可:

  1. 将位置判断条件从i + j >= n调整为i + j >= n -1
  2. 将行尾的print("\r")替换为无参数的print(),Python中print默认会在输出末尾追加\n换行符,符合判题系统的格式要求。

修正后的完整代码:

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the staircase function below.
def staircase(n):
    for i in range(0,n):
        for j in range(0,n):
            if (i + j >= n-1):
                print("#",end='') 
            else:
                print(" ",end='')
        print()

if __name__ == '__main__':
    n = int(input())

    staircase(n)

更简洁的优化写法

可以直接利用Python内置的字符串右对齐方法rjust()省略双重循环,逻辑更简洁不易出错:

def staircase(n):
    for i in range(1, n+1):
        print(('#' * i).rjust(n))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:00:52