我正在尝试解决 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 不接受我的回答吗?
您的输出不正确;你在楼梯前打印了一个不应该在那里的空行。您的
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))
您可以使用 rjust 将字符串向右对齐:
def staircase(n):
for i in range(1, n+1):
print(("#" * i).rjust(n))
另一种解决方案
n = int(raw_input())
s = '#'
for i in xrange( 1 , n+1):
print " "*(n-i) + s*i
首先,创建一个列表,然后使用 join 进行打印
\n'
def staircase(n):
print("\n".join([' ' * (n-x) + '#' * x for x in range(1, n+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)
它看起来像次对角线
def staircase(n):
for i in range(n):
for j in range (n):
if i+j == n-1:
print(" "*j+"#"*(n-j))
输出-
#
##
###
####
#####
######
for i in range(n):
result = ' '*(n-i-1) +('#')*(i+1)
print(result)
我收到错误,直到我用加号替换逗号:
print(' ' * (n - i - 1) + '#' * (i + 1))
理解问题就解决了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)
#
##
###
####
def staircase(n):
space = n-1
for i in range(n):
x = i + 1
print(" " * space + "#" * x)
space -= 1
还有一个解决方案:
def staircase(n):
for i in reversed(range(n)):
print(i*' '+(n-i)*'#')
您只需将 print 的 sep 参数从 ' ' 更改为 '',您的答案就是正确的
def staircase(n):
for i in range(1, n+1):
print(' ' * (n-i), '#' * (i), sep='')
您提交的答案不被接受,因为默认打印设置在打印输出前面添加了一个空格,而问题要求之一是输出中没有空格。
打印中默认的 sep 是空格字符,即 ' '。
这可能不是编写代码的最简洁的方式,但它确实有效:
print('\n'.join(' ' * (n - i) + '#' * i for i in range(1, n + 1)))
def staircase(n):
for i in range(1, n+1):
a = [' ']*(n-i)+['#']*i
print("".join(a))
另一个答案
H = int(input())
for i in range(1,H+1):
H = H - 1
print(' '*(H) + ('#'*(i)))
您也可以简单地使用 while 循环。
import sys
n1=int(raw_input())-1
n2=1
while n1>=0:
print " "*n1,"#"*n2
n1=n1-1
n2=n2+1
def staircase(n):
for in range(i,n+1):
print str("#"*i).rjust(n)