小浅丶 发表于 2020-9-17 17:23:42

004讲:练习题第二题打印星号的问题


-----小甲鱼的答案-----
temp = input('请输入一个整数:')
number = int(temp)
while number:
    i = number - 1
   while i:
      print(' ', end = '')
      i = i - 1
    j = number
    while j:
      print('*', end = '')
      j = j - 1
    print()
    number = number - 1

小甲鱼的答案为什么可以打出空格和星号的组合,我的答案虽然也可以打出,但是思路完全不一样 没有理解,需要前辈们指点一下疑问:
1. 在print里面和我完全不一致,没有任何乘积和拼接的关系,为什么可以打印出对应的结果?

-----我的答案-----
print('-------------------------第四课小游戏课后习题----------------------------')
temp = input("请输入一个整数:")                #要求用户输入一个整数
n = int(temp)                                                #命名变量为n,将用户输入的整数赋值与n
m = 0                                                        #命名判断变量为m,初始值为0
if n > m:                                                        #判断n是否大于m
    m = m + 1                                                #如若n>m,则m+1,并打印字符串,打印规则:n-m个空格和n-m+1个*号
    print(" " * (n - m) + '*'* (n - m + 1) )
else:                                                                #如若n<=m,则直接打印*号,结束
    print('*')
while n != m:                                                #判断n是否与m相等
    if n > m:                                                #如若n>m,则m+1,并按照规则打印,继续判断m是否符合循环条件
      m = m + 1
      print(' '* (n - m) + '*'* (n - m + 1) )
    else:                                                        #否则打印*号
      print('*')

昨非 发表于 2020-9-17 18:36:26

本帖最后由 昨非 于 2020-9-17 18:41 编辑


temp = input('请输入一个整数:')
number = int(temp)
while number:         #外循环
    i = number - 1
    while i:#这层循环4到0内循环前半部分
      print(' ', end = '')#每行打印空格
      i = i - 1
    j = number #这层循环5到0
    while j:
      print('*', end = '')#每行打印*号(在空格后)内循环后半部分
      j = j - 1
    print()
    number = number - 1   
见注释,之所以能实现是因为i和j同时起到计数的作用,根部不需要那么复杂的公式
好好理解一下
如果解决了,记得给个最佳

小浅丶 发表于 2020-9-18 10:52:08

昨非 发表于 2020-9-17 18:36
见注释,之所以能实现是因为i和j同时起到计数的作用,根部不需要那么复杂的公式
好好理解一下
如果解决 ...

我明白了。最主要的是内部两个是循环的问题,之前没理解是由于我把整体只看成一个循环了,没有注意i 和 j的循环结果。谢谢。

首先,当number不等于0时执行内循环,
内循环有两个:
第一个关于i,第一次number = 8初次执行i的内循环,因此进入以后 i的值为7,在i的循环末尾的 i - 1,也就执行了7,6,5,4,3,2,1共7次,打印了七个空格,第8次由于 i = 0 跳出循环,第一个内循环的第一次循环结束;
第二个关于j,第一次j=number=8,进入j的内循环以后,j = 8,通过末尾的公式,j=j-1,执行了8,7,6,5,4,3,2,1 共8次,打印了8个*号,第二个内循环的第一次循环结束;
*号会打印在空格后面是因为j 循环在i的下面,后执行
以此类推,在外循环执行的number= number - 1 整体循环就完成了8次,分别是number等于8 7 6 5 4 3 2 1,完成了图形的打印。

页: [1]
查看完整版本: 004讲:练习题第二题打印星号的问题