Python中的Mario CS50

时间:2017-04-02 07:12:11

标签: python cs50

所以我尝试用python中的CS50编写马里奥分配而不是C来挑战自己,我设法让它工作!我不太明白循环是如何工作的,尤其是数学,因为我只是为了得到我想要的结果而玩。

作业的要求如下

  1. 使用哈希创建半金字塔
  2. 确保它正确对齐
  3. 它应对应于用户
  4. 给出的高度
  5. 第一行应以2“#”s
  6. 开头

    对我的循环的任何澄清都将非常感激:)

    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));
    

4 个答案:

答案 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")