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(列表索引越界)错误。
修复方案
最小改动修正原有逻辑
仅需修改两处即可:
- 将位置判断条件从
i + j >= n调整为i + j >= n -1 - 将行尾的
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
相关产品推荐
相关产品推荐

