鱼C论坛

 找回密码
 立即注册
查看: 1556|回复: 7

没有跳出循环

[复制链接]
发表于 2019-12-23 21:55:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 左游仙 于 2019-12-23 23:07 编辑

Python第004讲课后作业,动动手的第02题,正确答案如下:
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(红色部分)是用来控制每一行的空格数的(空格数比输入的数字少1),但是我想改成i = number - 2(红色部分)空格数比输入的数字少2)时,循环就结束不了,没想明白,新手求解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 22:09:01 | 显示全部楼层
      如果把楼主的想法正确落实到代码中是不会死循环的。
      两个循环的循环变量分别是 i 和 j,在循环中也要一以贯之,不可用错,否则的话,用错循环变量当然就死循环了。
      比如:
  1.     i = number - 1
  2.     while i:
  3.         print(' ', end = '')
  4.         j = j - 1
复制代码

      这种情况显然就会死循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-23 22:53:04 | 显示全部楼层
没看到你的代码的情况下很难明白你在说啥。。
如果你是把while i下面的i = i - 1改成了i = number - 1的话,那么死循环的原因就是循环困在了while i里面,因为i永远不会减到0,循环条件永远为True。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-23 23:08:22 | 显示全部楼层
jackz007 发表于 2019-12-23 22:09
如果把楼主的想法正确落实到代码中是不会死循环的。
      两个循环的循环变量分别是 i 和 j,在循 ...

我之前的问题没有描述清楚,现在又重新描述了一遍,麻烦大佬再看一下,感激不尽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-23 23:08:58 | 显示全部楼层
Hoiste 发表于 2019-12-23 22:53
没看到你的代码的情况下很难明白你在说啥。。
如果你是把while i下面的i = i - 1改成了i = number - 1的话 ...

我之前的问题没有描述清楚,现在又重新描述了一遍,麻烦大佬再看一下,感激不尽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-23 23:15:07 | 显示全部楼层
左游仙 发表于 2019-12-23 23:08
我之前的问题没有描述清楚,现在又重新描述了一遍,麻烦大佬再看一下,感激不尽

      如果只是把 i = number - 1 改成 i = number - 2 是绝不可能死循环的,除非楼主键入的 number 小于 2!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-24 09:34:28 | 显示全部楼层
本帖最后由 Hoiste 于 2019-12-24 09:36 编辑
Hoiste 发表于 2019-12-23 22:53
没看到你的代码的情况下很难明白你在说啥。。
如果你是把while i下面的i = i - 1改成了i = number - 1的话 ...


这样的话造成死循环有几种可能:
一、缩进不对,你查看下有没有把number = number - 1正确缩进
二、我觉得大概率是这个,while i 这个循环结构必须while后面的语句为False或者0的时候才能结束循环,如果你的number是一个奇数,那么number在减到1的情况下i = number - 2为一个负数,那么无论怎么减都不会为0,这时候while i就会进入死循环了,因为负数的也会判断为True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-26 20:04:57 | 显示全部楼层
该程序无法正确结束的原因在于输出空格的循环与输出*号的循环无法达到同时结束,按你所表述的情况,当i = number -2 时出现了死循环的情况,那么分析,当number = 2时,i = number = 0,此时不会打印空格,但此时j=2,其会输出两个*号;下一轮循环开始时,number = 1 此时 i = 1 - 2 = -1,(while i)判断为真,随后循环体不断对 i 进行自减运算,i = -2,-3,-4......... 永远达不到 i = 0的条件,故而产生死循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-21 12:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表