有始有终 发表于 2019-12-5 21:47:23

004讲课后题 有一点不太明白

动动手第二题
为了输出这个
   请输入一个整数:8
********
*******
******
*****
****
***
**
*
则应该:
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

此时
   i = number - 1
    while i:
      print(' ',end = '')
      i = i -1
在这个循环里 i最开始为number-1=7 的话print(' ',end = '') 表示连着输出7个空格
但是这一讲的前面课后第一题
i = 10
while i:
    print('我爱鱼C!')
    i = i - 1
表示的却是现i = 10,执行print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
得i =9,执行   print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
得i =8,执行   print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
.
.
.
.
这样循环,当 i = 0 时退出循环
如果按照上一个题的逻辑 应该是 当i=10的时候 执行的是输出10个我爱鱼C,当i=9的时候执行输出9个我爱鱼C啊????

有始有终 发表于 2019-12-5 21:48:56

原题是这个上面打错了
请输入一个整数:8
       ********
      *******
   ******
    *****
   ****
***
**
*

WXF666 发表于 2019-12-5 22:13:17

i控制空格数,j控制“*”
Number-1是规律,有number个‘*’,就有number-1个空格
两个while 的逻辑没有什么不同啊,到底想问什么。。

jackz007 发表于 2019-12-5 22:20:34

      “如果按照上一个题的逻辑 应该是 当i=10的时候 执行的是输出10个我爱鱼C,当i=9的时候执行输出9个我爱鱼C。。。。。。”
          楼主差矣,是每次循环只打印 1 个 "我爱鱼C",整个循环过程总共打印出 10 个 "我爱鱼C"。

有始有终 发表于 2019-12-5 22:32:32

jackz007 发表于 2019-12-5 22:20
“如果按照上一个题的逻辑 应该是 当i=10的时候 执行的是输出10个我爱鱼C,当i=9的时候执行输出9个 ...

想问问 同样最后一步 是i-1
为什么第一个 在下一个i-1循环之前 是直接打出了7个空格 下一个循环前面打出6个空格
而第二个题 在下一个i-1循环之间 只打出了 一个我爱鱼C 下一个循环还是只打出一个我爱鱼C

有始有终 发表于 2019-12-5 22:35:43

WXF666 发表于 2019-12-5 22:13
i控制空格数,j控制“*”
Number-1是规律,有number个‘*’,就有number-1个空格
两个while 的逻辑没有什 ...

可能我上面说的太罗嗦了
想问问 同样最后一步 是i-1
为什么第一个 在下一个i-1循环之前 是直接打出了7个空格加星号下一个循环前面打出6个空格加星号
而第二个题 在下一个i-1循环之间 只打出了 一个我爱鱼C 下一个循环还是只打出一个我爱鱼C
明明是一样的流程 第一道题加起来一共打了7+6+5+4+3+2+1个空格 而第二道题一共只打了10个我爱鱼C

WXF666 发表于 2019-12-6 11:15:16

有始有终 发表于 2019-12-5 22:35
可能我上面说的太罗嗦了
想问问 同样最后一步 是i-1
为什么第一个 在下一个i-1循环之前 是直接打出了7 ...

不一样,第一个有end =‘’,不用换行就可以直接继续在后面打印,你第二个while的print后面加上end= ‘’试试就知道了

zltzlt 发表于 2019-12-6 19:12:43

有始有终 发表于 2019-12-5 22:35
可能我上面说的太罗嗦了
想问问 同样最后一步 是i-1
为什么第一个 在下一个i-1循环之前 是直接打出了7 ...

第一道题是双层循环,与第二题不同,第二题是单层循环。

WilsonWolf2333 发表于 2019-12-27 08:47:05

尝试回答你帖子中的这个疑问:“如果按照上一个题的逻辑 应该是 当i=10的时候 执行的是输出10个我爱鱼C,当i=9的时候执行输出9个我爱鱼C啊????”
我运行代码后得到的结论是,的确会打印出10个"我爱鱼C!"。
另外说实话没有太明白你的问题。。建议首先总结抛出你的问题,比如“你认为... 实际结果...我的疑问是...”
修改代码加入了print当前i值如下,希望能帮上忙。
i = 10
while i:
    print('我爱鱼C!')
    print('此时i值为:', i, '进入下一次循环')
    i = i - 1

yjptx121 发表于 2019-12-28 11:37:16

我理解的是while i和while j都是一个单独的循环,当while i循环一直运行直至不满足条件后才会进行while j循环,所以才会是多个*而不是一个*

陌上酒 发表于 2019-12-28 13:18:55

本帖最后由 陌上酒 于 2019-12-28 13:21 编辑

第一个课后题里面再给i赋值的时候就已经是‘i = number -1’了,
所以这个循环

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
和下面另一题里的循环是少一次的。

yjptx121 发表于 2019-12-28 21:03:09

i = 10
while i:
    print('我爱鱼C!')
    i = i - 1
表示的却是现i = 10,执行print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
得i =9,执行   print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
得i =8,执行   print('我爱鱼C!'),打印出我爱鱼C!,再执行 i = i - 1
=========================================
以上 如果你想当i=10的时候 执行的是输出10个我爱鱼C,当i=9的时候执行输出9个我爱鱼C,那么就要改成print('我爱鱼C!'*i)

罗C 发表于 2020-2-23 22:41:29

i=int(input("请输入一个整数:"))

while i>0:
    print(" "*i+"*"*i)
    i=i-1

我的代码是这样的,觉得更加简洁一点。
页: [1]
查看完整版本: 004讲课后题 有一点不太明白