sanyudian 发表于 2023-10-8 16:55:32

新手python课程乘法表倒过来的问题

求助,以下代码为啥会陷入死循环,找不到错误,帮帮
{:5_104:}



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

isdkz 发表于 2023-10-8 16:56:15

问题出在 if x < y: 的判断条件上。在每次循环中,x 的值会递减,而 y 的值会递增。当 x < y 时,会执行 if 语句块中的代码,将 x 的值重新设为 9,但是 y 的值并没有重置,导致循环条件 y <= 9 一直为真,从而陷入死循环。

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

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


这样修改后,当 x < y 时,会将 x 和 y 的值同时重置为初始值,避免了死循环的问题。

sanyudian 发表于 2023-10-8 17:06:15

isdkz 发表于 2023-10-8 16:56
问题出在 if x < y: 的判断条件上。在每次循环中,x 的值会递减,而 y 的值会递增。当 x < y 时,会执行 if ...

但是哥你修改的代码和原来的代码不是一样的吗。

sanyudian 发表于 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会陷入死循环呢

Mike_python小 发表于 2023-10-8 18:03:42

sanyudian 发表于 2023-10-8 14:18
x = 9
y = 1



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


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


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

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

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


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")


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

通过添加 `continue` 语句,我们确保在重置 `x` 并增加 `y` 的值之后,立即开始下一次循环,从而避免了死循环。

sanyudian 发表于 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推出循环。
不是上述我所想的话,请问在换行代码后,会从哪里开始执行呢。

小甲鱼 发表于 2023-10-10 07:25:36

设置了while y <= 9:作为循环的终止条件

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

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

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

因此,y的值永远不会大于9,所以这个循环会一直进行下去,形成了一个死循环

小甲鱼 发表于 2023-10-10 07:26:09

如果你想打印出九九乘法表,你可以尝试修改你的代码如下:

x = 9
y = 1

while y <= 9:
    while x >= y:
      print(x,"*",y,"=",x * y, end=" ")
      x = x - 1
    print()# 换行
    y = y + 1
    x = 9
页: [1]
查看完整版本: 新手python课程乘法表倒过来的问题