为什么这个简单的减法代码不起作用

问题描述

这是我原始代码的最小表示

x = 0
count = 0
a=30-count

while x < 10:
    if True:
         count = count+1
         x = x+1

print("count is ",count)
print("a is ",a)

这是输出

count is  10
a is  30

输出中的 a 应该是 20,但“a=30-count”行不起作用

为了使它工作,我必须将行 'a=30-count' 移动到 'print("a is ",a)' 正上方 但我想要代码开头的行 'a=30-count'

我尝试将 a 设置为全局变量,但没有用

如果我的问题格式不正确,也预先感谢您,这是我第一次在本网站上发布问题

解决方法

Python 是一种过程命令式编程语言,代码从上到下运行。当您将 a=30-count 放在代码的开头时,python 会将 count = 0 替换为该行代码,从而将其解释为 a = 30 - 0。所以,它打印 30。

尝试将 print("a is ",a) 移至 a=30-count 正下方的行,您将看到 a 为 30。

您已经知道使其正常工作的正确方法,即将 a=30-count 移动到 print("a is ",a) 上方,因为这样 python 就会在那里重放 count = 10。

,
a=30-count

仅在您最初调用时调用一次。要纠正此问题,您应该在 while 循环结束时调用它。

x = 0
count = 0

while x < 10:
    if True:
         count = count+1
         x = x+1
a=30-count

这给你

count is  10
a is  20

还有

if True:

是多余的,因为您的 while 循环本质上是在说 while x

,

Python 会将 count 解释为 0 并且 a = 30-0 因此得到答案。然后它将继续while loop

您必须在 a=30-count 之后移动 while loop 行。

x = 0
count = 0

while x < 10:
    count +=1
    x = x+1
a=30-count

print("count is",count)
print("a is",a)
,

这不起作用,因为您在更改计数值之前声明了 a 的值, 所以 a 的值是: 30 - 0 这只不过是 30。

运行WHILE循环后,count的值变为10,但是a的值没有更新,因为之前已经声明为(30-0)了。

变量 a 不会在 count 的值每次更改时都保持更新,这就是您必须再次更新它的值的原因。

代码如下:

count = 0
a = 30

for x in range(10):
    count += 1

a -= count

print("count is ",count)
print("a is ",a)

输出应如下所示:

count is 10
a is 20
,
x = 0
count = 0
a=30-count

while x < 10:
    if True:
         count = count+1
         x = x+1

print("count is ",a) 

相当于

x = 0
count = 0
a=30-count

while x < 10:
  count = count + 1
  x = x + 1
print("count is ",a)

讨论问题,python从上到下计算代码形式。因此,当您设置 a = 30-count 时,count 的值为 0,因此 'a' 的值为 30。正如您所说,解决此问题的最重要方法是在打印语句之前放置一行 要么 创建一个函数

def updateA():
  global a
  a = 30 - count

并在打印语句之前调用函数 updateA()。 我希望这会奏效

,

当您编写 a = 30 - count 时,它不会“绑定”变量 a 到变量 count。它只是使用 a 的当前值计算 count 的值。

如果你想“保存”表达式 30 - count 以便以后重新计算,你可以把它放在一个函数中:

def a(count):
  return 30 - count

x = 0
count = 0

while x < 10:
    count = count+1
    x = x+1

print("count is ",a(count))

# count is  10
# a is  20