我正在编写一个程序,它应该产生如下输出:
`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)`
任何帮助都将不胜感激:))
你可以试试这个
您只复制最后一个产品(2 x 3 x 3=18)。
因为您在循环(
x = (int_list[i]*int_list[i])
)中重新分配了x
,然后用add = (x+x)
复制了x
但你必须建立一个总和
您的问题存在于以下位置:
让我们浏览一下代码所做的工作,以便更好地了解出了什么问题
对于[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循环中的值,然后在显示之前将值加倍
要解决这些问题,我们可以首先删除这个函数,并给出以下代码
但是程序仍然存在覆盖问题,因此列表[1,2,3]的值将是9
为了解决这个问题,而不是覆盖x的值,让我们创建一个新变量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,因此可以简单地使用以下代码:
这个问题如此困难的一个原因是for循环比它需要的更复杂。有可能不需要遍历由数字列表生成的索引列表,然后通过索引评估列表中的数字。可以直接遍历这些数字
通过这种简化,您的循环将如下所示:
这些更改将使您的整个计划如下所示:
相关问题 更多 >
编程相关推荐