程序将whileloop输入的数字平方添加到列表中

2024-06-16 13:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,它应该产生如下输出:

`Enter an integer (or Q to quit): 1
Enter an integer (or Q to quit): 2
Enter an integer (or Q to quit): 3
Enter an integer (or Q to quit): Q
(1 x 1) + (2 x 2) + (3 x 3) = 14`

到目前为止,我已经得到了正确的方程显示,但我似乎不知道如何实际得到方程的总数。目前,总数显示为18,而不是预期的14

以下是我目前的代码:

`int_list = [] # initiate list 

while True:
  user_input = input("Enter an integer (or Q to quit): ") # get user input
  if user_input == "Q": # break loop if user enters Q
    break
  integer = int(user_input) # convert user_input to an integer to add to list
  int_list.append(integer) # add the integers entered to the list

for i in range(0, len(int_list)):
  template = ("({0} x {1})".format(int_list[i], int_list[i]))
  if i == len(int_list)-1:
    trailing = " = "
  else:
    trailing = " + "
  print(template, end="")
  print(trailing, end="")

for i in range(0, len(int_list)):
  x = (int_list[i]*int_list[i])

add = (x+x)
print(add)`

任何帮助都将不胜感激:))


Tags: ortoanaddinputlenifinteger
3条回答

你可以试试这个

state= True
combi= []
while state:
    user_input = input("Enter an integer (or Q to quit): ").lower() 
    if "q" in user_input: 
        state= False
    else:
        combi.append(int(user_input))
else:
    final= sum([x+x for x in combi])
    print(final)

您只复制最后一个产品(2 x 3 x 3=18)。
因为您在循环(x = (int_list[i]*int_list[i]))中重新分配了x,然后用add = (x+x)复制了x

但你必须建立一个总和

int_list = []  # initiate list

while True:
    user_input = input("Enter an integer (or Q to quit): ")  # get user input
    if user_input == "Q":  # break loop if user enters Q
        break
    integer = int(user_input)  # convert user_input to an integer to add to list
    int_list.append(integer)  # add the integers entered to the list

for i in range(0, len(int_list)):
    template = ("({0} x {1})".format(int_list[i], int_list[i]))
    if i == len(int_list) - 1:
        trailing = " = "
    else:
        trailing = " + "
    print(template, end="")
    print(trailing, end="")

x = 0
for i in range(0, len(int_list)):
    x += (int_list[i] * int_list[i])

print(x)

您的问题存在于以下位置:

for i in range(0, len(int_list)):
  x = (int_list[i]*int_list[i])

add = (x+x)
print(add)

让我们浏览一下代码所做的工作,以便更好地了解出了什么问题

对于[1,2,3]列表,for循环将迭代三次

在第一次迭代中,x将被分配值1,因为1*1是1

在第二次迭代中,x将被分配值4,因为2*2是4。请注意,不是两个值相加,而是x的值被覆盖

在第三次迭代中,x将被分配值9,因为3*3是9。该值再次被覆盖

在循环之后,变量add用值x+x创建,或者在我们的例子中9+9是18

这就是为什么列表[1,2,3]显示的值是18

现在我们已经解决了这个问题。我们可以看到问题是覆盖for循环中的值,然后在显示之前将值加倍

要解决这些问题,我们可以首先删除这个函数,并给出以下代码

for i in range(0, len(int_list)):
  x = (int_list[i]*int_list[i])

print(x)

但是程序仍然存在覆盖问题,因此列表[1,2,3]的值将是9

为了解决这个问题,而不是覆盖x的值,让我们创建一个新变量total,它将在每次迭代中向其添加循环的结果,而不是被覆盖

total = 0 
for i in range(0, len(int_list)):
    total = total + (int_list[i]*int_list[i])
    
print(total)

现在让我们来看看代码现在做了什么

对于[1,2,3]列表,for循环将迭代三次

在第一次迭代中,total将被分配值1,因为0+1*1是1

在第二次迭代中,total将被分配值5,因为1+2*2是5。请注意循环迭代的上一个值是如何添加到循环中的

在第三次迭代中,total将被分配值14,因为5+3*3是14。再次注意循环迭代的上一个值是如何添加到循环中的

这为我们提供了14的正确结果

python的一个很好的特性是addition assignment,它将A=A+B压缩到A+=B,因此可以简单地使用以下代码:

total = 0 
for i in range(0, len(int_list)):
    total += (int_list[i]*int_list[i])
    
print(total)

这个问题如此困难的一个原因是for循环比它需要的更复杂。有可能不需要遍历由数字列表生成的索引列表,然后通过索引评估列表中的数字。可以直接遍历这些数字

通过这种简化,您的循环将如下所示:

total = 0 
for number in int_list:
    total += number * number
    
print(total)

这些更改将使您的整个计划如下所示:

int_list = [] # initiate list

while True:
  user_input = input("Enter an integer (or Q to quit): ") # get user input
  if user_input == "Q": # break loop if user enters Q
    break
  integer = int(user_input) # convert user_input to an integer to add to list
  int_list.append(integer) # add the integers entered to the list

for i in range(0, len(int_list)):
  template = ("({0} x {1})".format(int_list[i], int_list[i]))
  if i == len(int_list)-1:
    trailing = " = "
  else:
    trailing = " + "
  print(template, end="")
  print(trailing, end="")

total = 0 # start the total at zero as no values have been calculated yet
for number in int_list: # iterate through all values in the list
  total += number * number # add to the total the number squared

print(total)

相关问题 更多 >