HackerRank 阶梯 Python

问题描述 投票:0回答:17

我正在尝试解决 HackerRank 中的问题,但我的提交有问题。我的代码可以在 PyCharm 中运行,但 HackerRank 不接受我的提交。

这是我试图解决的问题:https://www.hackerrank.com/challenges/staircase

这是我的代码:

def staircase(num_stairs):
    n = num_stairs - 1
    for stairs in range(num_stairs):
        print ' ' * n, '#' * stairs
        n -= 1
    print '#' * num_stairs
staircase(12)

你知道为什么 HackerRank 不接受我的回答吗?

python
17个回答
17
投票

您的输出不正确;你在楼梯前打印了一个不应该在那里的空行。您的

range()
循环从
0
开始,因此您在第一行打印
n
空格和零
#
字符。

从 1 开始

range()
n
应从
num_stairs - 2
开始(因为
print()
的多个参数会添加一个空格:

from __future__ import print_function

def staircase(num_stairs):
    n = num_stairs - 2
    for stairs in range(1, num_stairs):
        print(' ' * n, '#' * stairs)
        n -= 1
    print('#' * num_stairs)

您可以将其简化为一个循环:

def staircase(num_stairs):
    for stairs in range(1, num_stairs + 1):
        print(' ' * (num_stairs - stairs) + '#' * stairs)

请注意,我现在使用串联来组合空格和

#
字符,以便在循环的最后一次迭代中打印零空格和
num_stairs
#
字符。

最后但并非最不重要的一点是,您可以使用

str.rjust()
方法(“右对齐”的缩写)来提供空格:

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

5
投票

您可以使用 rjust 将字符串向右对齐:

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

2
投票

另一种解决方案

n = int(raw_input())
s = '#'
for i in xrange( 1 , n+1):
    print " "*(n-i) + s*i

2
投票

首先,创建一个列表,然后使用 join 进行打印

\n'

def staircase(n):
    print("\n".join([' ' * (n-x) + '#' * x for x in range(1, n+1)]))

1
投票
def staircase(n):
    for i in range(0, n): # n rows 
        print(' '*(n-i-1) + '#'*(i+1)) # first print n-i-1 spaces followed by i '#'


n = int(input())
staircase(n)

1
投票

它看起来像次对角线

 def staircase(n):
        for i in range(n):
            for j in range (n):
                if i+j == n-1:
                    print(" "*j+"#"*(n-j))

输出-

     #
    ##
   ###
  ####
 #####
######

0
投票
for i in range(n):
    result = ' '*(n-i-1) +('#')*(i+1)
    print(result)

0
投票

我收到错误,直到我用加号替换逗号:

print(' ' * (n - i - 1) + '#' * (i + 1))

0
投票

理解问题就解决了80%的问题。要求规定了最小/最大楼梯总数。

"""
Prints a staircase with a total number of stairs
Note: total number of stairs must be between 1 and 100 inclusive, as per requirements
"""
def staircase(n):
    if n < 1 or n > 100:
        print("Error: Total number of stairs must be between 1, 100 inclusive!")
    else:
        for x in range(1, n+1):
            print(" " * (n - x) + "#" * x )

#-----------------------
staircase(0)
Error: Total number of stairs must be between 1, 100 inclusive!

staircase(101)
Error: Total number of stairs must be between 1, 100 inclusive!

staircase(4)
   #
  ##
 ###
####



0
投票
def staircase(n):
    space = n-1
    for i in range(n):
        x = i + 1
        print(" " * space + "#" * x)
        space -= 1

0
投票

还有一个解决方案:

def staircase(n):
    for i in reversed(range(n)):
        print(i*' '+(n-i)*'#')

0
投票

您只需将 print 的 sep 参数从 ' ' 更改为 '',您的答案就是正确的

def staircase(n):    
    for i in range(1, n+1):
        print(' ' * (n-i), '#' * (i), sep='')

您提交的答案不被接受,因为默认打印设置在打印输出前面添加了一个空格,而问题要求之一是输出中没有空格。

打印中默认的 sep 是空格字符,即 ' '。


0
投票

这可能不是编写代码的最简洁的方式,但它确实有效:

print('\n'.join(' ' * (n - i) + '#' * i for i in range(1, n + 1)))

0
投票
def staircase(n):
    for i in range(1, n+1):
        a = [' ']*(n-i)+['#']*i
        print("".join(a))

-1
投票

另一个答案

    H = int(input())
    for i in range(1,H+1):
       H = H - 1
       print(' '*(H) + ('#'*(i)))

-1
投票

您也可以简单地使用 while 循环。

import sys
n1=int(raw_input())-1
n2=1

while n1>=0:
    print " "*n1,"#"*n2
    n1=n1-1
    n2=n2+1

-2
投票
 def staircase(n):
     for in range(i,n+1):
          print str("#"*i).rjust(n)    
© www.soinside.com 2019 - 2024. All rights reserved.