鱼C论坛

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

[已解决]新手python课程乘法表倒过来的问题

[复制链接]
发表于 2023-10-8 16:55:32 | 显示全部楼层 |阅读模式

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

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

x
求助,以下代码为啥会陷入死循环,找不到错误,帮帮




x = 9
y = 1

while y <= 9:
    print(x,"*",y,"=",x * y,end=" ")
    x = x - 1
    if x < y:
         x = 9
         y = y + 1
    else:
        continue

最佳答案
2023-10-10 07:26:09
如果你想打印出九九乘法表,你可以尝试修改你的代码如下:

  1. x = 9
  2. y = 1

  3. while y <= 9:
  4.     while x >= y:
  5.         print(x,"*",y,"=",x * y, end=" ")
  6.         x = x - 1
  7.     print()  # 换行
  8.     y = y + 1
  9.     x = 9
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 16:56:15 | 显示全部楼层
问题出在 if x < y: 的判断条件上。在每次循环中,x 的值会递减,而 y 的值会递增。当 x < y 时,会执行 if 语句块中的代码,将 x 的值重新设为 9,但是 y 的值并没有重置,导致循环条件 y <= 9 一直为真,从而陷入死循环。

要解决这个问题,需要在 if 语句块中同时将 x 和 y 的值重置为初始值。修改代码如下:

  1. x = 9
  2. y = 1

  3. while y <= 9:
  4.     print(x, "*", y, "=", x * y, end=" ")
  5.     x = x - 1
  6.     if x < y:
  7.         x = 9
  8.         y = y + 1
  9.     else:
  10.         continue
复制代码


这样修改后,当 x < y 时,会将 x 和 y 的值同时重置为初始值,避免了死循环的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-10-8 17:06:15 | 显示全部楼层
isdkz 发表于 2023-10-8 16:56
问题出在 if x < y: 的判断条件上。在每次循环中,x 的值会递减,而 y 的值会递增。当 x < y 时,会执行 if ...

但是哥你修改的代码和原来的代码不是一样的吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-8 17:18:28 | 显示全部楼层
x = 9
y = 1

while y <= 9:
    print(x,"*",y,"=",x * y,end=" ")
    x = x - 1
    if x < y:
        x = 9
        y = y + 1
        print("\n")
        continue
将代码改成以上后问题消失了,但还是不太明白。出现问题的原因不知道。解决的思路是手动在y上升后加个continue回到循环开头继续打印乘法表,但是为啥不加continue会陷入死循环呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 18:03:42 | 显示全部楼层

首先,让我们分析一下你提供的代码:


  1. x = 9
  2. y = 1

  3. while y <= 9:
  4.     print(x, "*", y, "=", x * y, end=" ")
  5.     x = x - 1
  6.     if x < y:
  7.         x = 9
  8.         y = y + 1
  9.         print("\n")
  10.         continue
复制代码


这段代码的目的是打印一个乘法表,其中 `x` 从 9 递减到 `y`,然后 `y` 递增。当 `x` 小于 `y` 时,将 `x` 重置为 9,然后增加 `y` 的值。`continue` 语句用于跳过当前循环的剩余部分,并立即开始下一次循环。

现在,让我们回答你的问题:为什么不加 `continue` 会陷入死循环?

如果我们去掉 `continue` 语句,代码将如下所示:


  1. x = 9
  2. y = 1

  3. while y <= 9:
  4.     print(x, "*", y, "=", x * y, end=" ")
  5.     x = x - 1
  6.     if x < y:
  7.         x = 9
  8.         y = y + 1
  9.         print("\n")
复制代码


在这种情况下,当 `x` 小于 `y` 时,我们将 `x` 重置为 9,并增加 `y` 的值。然后,我们打印一个换行符。但是,由于没有 `continue` 语句,代码将继续执行,而不是立即开始下一次循环。这意味着在同一次循环中,`x` 将再次减 1,然后再次检查 `x` 是否小于 `y`。这将导致 `y` 的值不断增加,但循环永远不会结束,因为 `y` 的值始终小于等于 9。

通过添加 `continue` 语句,我们确保在重置 `x` 并增加 `y` 的值之后,立即开始下一次循环,从而避免了死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-9 17:05:23 | 显示全部楼层
Mike_python小 发表于 2023-10-8 18:03
首先,让我们分析一下你提供的代码:

你好。如果没有‘continue’
第一轮当 ‘x’ 小于 ‘y' 时。重置 ’x‘ 为9,’y‘ 为2。在执行换行之后,不是应该继续从  
print(x, "*", y, "=", x * y, end=" ") 继续循环吗。
这样第二轮 'y' 就会等于 3,依次类推直到 ’y' 等于9推出循环。
不是上述我所想的话,请问在换行代码后,会从哪里开始执行呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-10 07:25:36 | 显示全部楼层
设置了while y <= 9:作为循环的终止条件

然后在循环体中,当x < y时,y = y + 1

因此,y的值会一直增加,直到它大于9为止

在y增加的过程中,你又将x的值重新设置为9,这使得x始终大于y

因此,y的值永远不会大于9,所以这个循环会一直进行下去,形成了一个死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-10 07:26:09 | 显示全部楼层    本楼为最佳答案   
如果你想打印出九九乘法表,你可以尝试修改你的代码如下:

  1. x = 9
  2. y = 1

  3. while y <= 9:
  4.     while x >= y:
  5.         print(x,"*",y,"=",x * y, end=" ")
  6.         x = x - 1
  7.     print()  # 换行
  8.     y = y + 1
  9.     x = 9
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 11:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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