minliang320 发表于 2022-8-30 12:02:08

第12讲的这个打印星号三角形是如何

n = int(input("请输入三角形的层数:"))
i = 1
while i <= n :
    j = 0
    while j < n-i:
      print (" ", end="")
      j = j+1
    j = 0
    while j < 2*i-1:
      print("*", end="")
      j = j+1
    print("")
    i = i+1

看了半天没看懂是如何实现打印三角形的,请高手逐句解释一下代码,谢谢!

jackz007 发表于 2022-8-30 12:19:45

本帖最后由 jackz007 于 2022-8-30 13:05 编辑

n = int(input("请输入三角形的层数:"))
i = 1                           # 行号 i 赋初值 1
while i <= n :                  # 循环 n 次,循环变量 i 的变化范围为 1、2... n
    j = 0                     
    while j < n-i:                  # 循环 n - i 次,在同一行连续打印 n - i 个空格,第1、2、3行将分别打印 n - 1、n - 2 、n - 3 个空格,第 n 行则没有空格。
      print (" ", end="")             # print(... , end = "") 代表不换行打印
      j = j+1
    j = 0                           
    while j < 2*i-1:                # 循环 2 * i - 1 次,在同一行连续打印 2 * i - 1 个星号,第1、2、3分别打印1、3、5 个星号
      print("*", end="")            # print(... , end = "") 代表不换行打印
      j = j+1
    print("")                     # 换行,准备打印下一行
    i = i+1                         # 行号增加 1
      试试这个简化版的代码:
n = int(input("请输入三角形的层数:"))
for i in range(1 , n + 1):                        # 循环 n 次,每次打印 1 行,循环变量 i 是行号,变化范围 1 ~ n。
    print(' ' * (n - i) + '*' * (2 * i - 1))      # 打印 n - i 个 ' ' 和 2 * i - 1 个 '*'

ba21 发表于 2022-8-30 18:55:49

有行有列,我们叫它二维。比如打印三角形,正方形,这都是2维。
打印2维就离不开双层循环嵌套(你也可以叫2层循环嵌套),
外层控制换行,内层打印一行的内容。

minliang320 发表于 2022-8-30 22:08:50

jackz007 发表于 2022-8-30 12:19
试试这个简化版的代码:

简化版的确实更优雅,赞!

我还是要先把原来的这个版本彻底搞明白,虽然都加了注释,但是作为一个刚开始学习python的小鱼油而言,还是有些没搞懂05-07、09-12这两个循环分别是实现什么?怎么实现的?

见笑,求教{:5_109:}

jackz007 发表于 2022-8-30 22:21:09

minliang320 发表于 2022-8-30 22:08
简化版的确实更优雅,赞!

我还是要先把原来的这个版本彻底搞明白,虽然都加了注释,但是作为一个刚开 ...

      抱歉,如果连这个都看不懂,那就没办法了,这两个循环要干什么我已经交代清楚了,而且,语法结构也很单一,无法进一步解释,因为,1 + 1 = 2 没办法解释。

minliang320 发表于 2022-9-1 17:11:54

minliang320 发表于 2022-8-30 22:08
简化版的确实更优雅,赞!

我还是要先把原来的这个版本彻底搞明白,虽然都加了注释,但是作为一个刚开 ...

一个同样在学python的同学那里总算搞懂了,为了能帮到其他和我一样菜的鱼油,我把同学给我的释义整理后分享如下:
1、这是一个两层循环结构,第一层循环是判断i<=n

2、第二层循环有两个,依次执行。第一个子循环是打印空格(可以理解为是做格式控制的,你可以把语句里面的空格换为其他符号,比如A,就更好理解了);第二个子循环是在第一个子循环结束完之后执行,表现出来就是第一个循环打空格,第二个子循环在空格之后打*

以下是程序释义:

n = int(input("请输入三角形的层数:"))#举个例子,比如n=5

i = 1   #初始赋值i=1
while i <= n:#判断i<5,
    j = 0      #初始赋值j=0
    while j < n-i:    # 判断j<5-1
      print (" ", end="")
#执行打印空格(end="")表示在一行里面打,就一直打空格,一直到j=4就不打了,(那么第一行就打印4个空格,分别是j=0,1,2,3的时候打印的)

      j = j+1
j = 0
#然后进入第二个子循环(这个时候i还是1,换言之还是在第一行,先赋值j=0
while j < 2*i-1:
      print("*", end="")
        # j<2*i-1的时候就打印*,此时i=1(第一行),只有j=0时候会满足j<2i,j<2*i-1,所以只打印1个*;第二个子循环结束
      j = j+1
    print("")# print(”“)执行换行
i = i+1   
#再赋值i=i+1,然后进入第二次循环,第二次循环i=2,如此……直到i=n=5结束程序

#最后写给二哥,谢谢你在火车上专门拿出电脑给我做了这么认真仔细的解释,如果有一天你无意间逛了这个论坛,看到这个帖子,你要知道我真的真的感谢你。
页: [1]
查看完整版本: 第12讲的这个打印星号三角形是如何