Python中的Mario CS50

Python中的Mario CS50,python,cs50,Python,Cs50,所以我试着用python而不是C从CS50编写mario作业来挑战自己,我成功地让它工作了!我不太明白循环是如何工作的,尤其是数学,因为我只是到处玩来得到我想要的结果 任务要求如下: 使用散列创建半金字塔 确保它正确对齐 它应与用户给定的高度相对应 第一行应该以2“#”开头 如对我的循环有任何澄清,将不胜感激:) print('Height:',end=''); h=int(输入()); 而(24小时): 打印(“这是无效的输入”) 打印('高度:',结束=''); h=int(输入()); 对

所以我试着用python而不是C从CS50编写mario作业来挑战自己,我成功地让它工作了!我不太明白循环是如何工作的,尤其是数学,因为我只是到处玩来得到我想要的结果

任务要求如下:

  • 使用散列创建半金字塔
  • 确保它正确对齐
  • 它应与用户给定的高度相对应
  • 第一行应该以2“#”开头
  • 如对我的循环有任何澄清,将不胜感激:)

    print('Height:',end='');
    h=int(输入());
    而(24小时):
    打印(“这是无效的输入”)
    打印('高度:',结束='');
    h=int(输入());
    对于范围(h)内的i:
    打印(“*(h-i)+“#”*(i+1));
    
    范围(开始、停止[、步进]) 函数的作用是:返回从某个下限(默认为零)到某个上限(但不包括)的整数列表,可能以其他数字(默认为一)的增量(步长)表示。 因此,


    首先,我想指出的是,您的代码并没有打印出整个金字塔;它只打印了一半。您的输出应该类似(例如,如果我们将高度输入为3):

    您的代码仅打印左侧:

      #
     ##
    ###
    
    现在,回答你的问题。以下是您如何让它工作的:

    为了描述for循环的条件语句,
    i
    从0开始,直到
    h

    要了解
    print()
    语句的工作原理,请将其视为由空格和哈希组成的线段。此段的长度为
    h
    。因此,在
    h-i
    中,您将此“段”的一部分打印为空格,在
    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开始(这样第一个散列被打印,整个“段”不仅仅是第一行中的空格),它在
    h+1
    结束(这样循环的范围保持不变)

    删除
    i+1
    ;查看
    print()
    语句可以更容易理解上面讨论的“段”逻辑


    *为了澄清,我在上面提供的备用代码并不打算替代您的代码;我只是为了强化我的“细分”理念而加入它。你的代码非常好,工作起来和我的一样好。

    我认为,这不是正确的答案。要理解它,请使用
    “quot
    或其他符号,而不是空格。如果
    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));
    
    print('Height:',end='');
    h=int(输入());
    而(24小时):
    打印(“这是无效的输入”)
    打印('高度:',结束='');
    h=int(输入());
    对于范围(h)内的i:
    打印(“”*(h-(i+1))+”#“*(i+1));
    

    对不起,我说的是英语。

    您希望将它们分成两部分,这样您就可以清楚地看到图片。从那里,并行实现将更容易。

    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.")
    
    
    并排打印


    金字塔不应该这样印刷。。。那只是金字塔的一半。
    for i in range(h):
         print(" " * (h - i) + "#" * (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
    
    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));
    
    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")