所以我尝试用python中的CS50编写马里奥分配而不是C来挑战自己,我设法让它工作!我不太明白循环是如何工作的,尤其是数学,因为我只是为了得到我想要的结果而玩。
作业的要求如下
对我的循环的任何澄清都将非常感激:)
print('Height: ', end='');
h = int(input());
while(h<0 or h > 24):
print("That is an invalid input")
print('Height: ', end='');
h = int(input());
for i in range(h):
print(" "*(h-i)+"#"*(i+1));
答案 0 :(得分:1)
Python range()函数从某个下限(零,默认情况下)返回一个整数列表,直到(但不包括)某个上限,可能以某个其他数字的增量(步长)(默认为1) 。 因此,
range(3) returns a sequence: 0, 1, 2
range(1,3) returns a sequence: 1, 2
range(1,7,2) returns a sequence: 1, 3, 5
答案 1 :(得分:0)
首先,只是想指出,你的代码不会打印出整个金字塔;它只打印出一半。您的输出应该类似(例如,如果我们输入高度为3):
# #
## ##
### ###
您的代码仅打印左侧:
#
##
###
现在,问你的问题。以下是您如何使用它:
for i in range(h): print(" " * (h - i) + "#" * (i + 1));
为描述for循环的条件语句,i
从0开始,一直到h
。
要了解print()
语句的工作原理,请将其视为由空格和散列组成的线段。该细分的长度为h
。因此,在h - i
中,您可以打印此部分&#34;段&#34;作为空格,在i + 1
中,您可以打印循环的其余部分。
现在,您使用i + 1
而不仅仅是i
的原因是因为for循环条件; i
从零开始。因此,您必须意识到第一行没有哈希值,因为有h - 0
个空格和0
哈希值。这就是i + 1
是必需的原因;如果仔细检查当前代码,则在每行的开头打印一个额外的空格。
更容易理解的代码逻辑具有相同的结果:
for i in range(1, h + 1): # The counter's range is toyed with here
print(" " * (h - i) + "#" * i); # The "i + 1" is removed
在这里,循环的范围被玩弄;现在它从1开始(这样就打印出第一个哈希值,整个&#34;段&#34;不仅是第一行中的空格),它结束于h + 1
(所以它的范围是循环保持不变)。
i + 1
被移除;看到print()
语句可以更容易理解&#34;段&#34;上面讨论的逻辑。
*为了澄清,我上面提供的替代代码并不是要替代您的代码;我只是把它包括在内以加强我的&#34;段&#34;理念。您的代码非常好,并且与我的代码一样好。
答案 2 :(得分:0)
"_"
或其他符号代替空格。如果height = 1
,我们可以看到_#
,但必须是#
。所以正确答案,可以是:
print('Height: ', end='');
h = int(input());
while(h<0 or h > 24):
print("That is an invalid input")
print('Height: ', end='');
h = int(input());
for i in range(h):
print("_" * (h - (i+1)) + "#" * (i + 1));
抱歉我的英语。
答案 3 :(得分:0)
您希望将它们分成两部分,以便清楚地看到图片。从那里并排实现会更容易。
left_align_counter = 0
print("Printing left aligned")
print("Height: ", end="")
height = int(input())
for h in range(height):
left_align_counter +=1
print("#"*left_align_counter)
print("DONE.")
right_align_counter = 0
print("Printing right align ")
for h in range(height):
right_align_counter += 1
print(" "*int(height-right_align_counter), end="")
print("#"*int(right_align_counter))
print("DONE.")
并排打印
left_align_counter = 0
print("Printing left aligned")
print("Height: ", end="")
height = int(input())
for h in range(height):
left_align_counter +=1
print("#"*left_align_counter)
print("DONE.")
right_align_counter = 0
print("Printing right align ")
for h in range(height):
right_align_counter += 1
print(" "*int(height-right_align_counter), end="")
print("#"*int(right_align_counter))
print("DONE.")
#here we can use any counter for the blocks be it right or left so just use counter variable
counter = 0
for h in range(height):
counter += 1
print(" "*int(height-counter), end="")
print("#"*int(counter), end=' ')
print("#"*int(counter),end="\n")