Python 将数组中的某些元素相乘
我正在编写数学序列生成器的第n项。我现在只是在试验前七个术语 用户在序列中输入Python 将数组中的某些元素相乘,python,Python,我正在编写数学序列生成器的第n项。我现在只是在试验前七个术语 用户在序列中输入1,2,3,4,5,6和7(或任何其他连续值),然后程序应将1乘以1,然后每隔输入一个项乘以8(因此在本例中输入的1、3、5和7) 它还应该将第二个数字乘以2,然后每隔一个输入的数字乘以2(在本例中,输入的是第二、第四和第六个数字) 之后,我希望它将所有内容都添加到一起。以下是我试图做的: x = [0,0,0,0,0,0,0] for n in range (0,7): x[n] = int(input(
1,2,3,4,5,6和7
(或任何其他连续值),然后程序应将1乘以1,然后每隔输入一个项乘以8(因此在本例中输入的1、3、5和7)
它还应该将第二个数字乘以2,然后每隔一个输入的数字乘以2(在本例中,输入的是第二、第四和第六个数字)
之后,我希望它将所有内容都添加到一起。以下是我试图做的:
x = [0,0,0,0,0,0,0]
for n in range (0,7):
x[n] = int(input("Input the digits of the sequence one by one:"))
if x[n] == x[0] or x[2] or x[4] or x[6]:
x[n] == x[n]*8
elif x[n] == x[1] or x[3] or x[5]:
x[n] == x[n]*2
else:
break
finalnumber = x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]
print(finalnumber)
我输入了1,2,3,4,5,6和7
,并计算出最终编号应为152
,但由于某种原因,该程序打印了28
请告诉我我做错了什么
我使用的是Python 3.6。而不是x[n]==x[n]*8
你应该写
x[n] = x[n]*8
由于双equalmark返回布尔值(True或False),它取决于注释中提到的结果,通常与if语句一起使用,因此单equalmark表示赋值。
当然,当您想在第二个语句中乘以2时,也会出现同样的情况。
我的意思是:
虽然这不是最符合python的方法,但是代码中有两个主要错误
- 首先,在
if
条件中,需要检查每个值。因此,将x[n]==x[0]或x[2]或x[4]或x[6]:
替换为if(x[n]==x[0])或(x[n]==x[2])或(x[n]==x[4])或(x[n]==x[6]):
- 其次,您需要在条件块内使用
赋值运算符(=)
,而不是使用比较运算符(=)
。因此,将x[n]==x[n]*2
替换为x[n]=x[n]*2
您之所以得到28
作为结果,是因为x[n]=int(输入(“逐个输入序列的数字:”)
将把值赋给x作为[1,2,3,4,5,6,7],在if-else块中,没有任何类型的赋值。因此,x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]
将导致1+2+3+4+5+6+7
等于28
您可以这样做:
x = [0,0,0,0,0,0,0]
for n in range (0,7):
x[n] = int(input("Input the digits of the sequence one by one:"))
if (x[n] == x[0]) or (x[n] == x[2]) or (x[n] == x[4]) or (x[n] == x[6]):
x[n] = x[n]*8
elif (x[n] == x[1]) or (x[n] == x[3]) or (x[n] == x[5]):
x[n] = x[n]*2
else:
break
finalnumber = x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]
print(finalnumber)
x = [int(input("Input the digits of the sequence one by one : ")) for _ in range(7)]
finalnumber = sum([num * 8 if i % 2 == 0 else num * 2 for i, num in enumerate(x)])
print(finalnumber)
这将导致:
152
152
或者,如果您想以一种类似于蟒蛇的方式进行此操作,您可以执行以下操作:
x = [0,0,0,0,0,0,0]
for n in range (0,7):
x[n] = int(input("Input the digits of the sequence one by one:"))
if (x[n] == x[0]) or (x[n] == x[2]) or (x[n] == x[4]) or (x[n] == x[6]):
x[n] = x[n]*8
elif (x[n] == x[1]) or (x[n] == x[3]) or (x[n] == x[5]):
x[n] = x[n]*2
else:
break
finalnumber = x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]
print(finalnumber)
x = [int(input("Input the digits of the sequence one by one : ")) for _ in range(7)]
finalnumber = sum([num * 8 if i % 2 == 0 else num * 2 for i, num in enumerate(x)])
print(finalnumber)
这也将导致:
152
152
您的错误主要源于您在循环中放置条件的方式-
if x[n] == x[0] or x[2] or x[4] or x[6]
将检查x[n]==x[0]
(即使n
不是0
,也可能是真的)或x[2]
为正(无论x[n]
)或x[4]
为正,依此类推
- 请注意,
或
在表达式之间分开,并不像英语中那样使用,a是b或c或d
表示a是b,或a是c,或a是d
,但a是b,或c是true,或d是true
李>
如果检查天气的[0,2,4,6]
中的n是该列表中的值之一,则与多个值进行比较的正确方法是
但是,对于您的情况,如果要过滤奇数和偶数,则不需要硬编码数字;如果x%2==0,只需进行奇偶校验-,即可覆盖所有情况
现在,让我们再次查看您的规范:
- 输入
n
数字
- 将奇数索引乘以2
- 将偶数索引乘以8
- 总而言之
现在是python风格:
n = 7
my_numbers = []
# Input n numbers.
for i in range(n):
my_numbers.append(int(input("Enter the {} term: ".format(i))))
for i in range(n):
# Mutiply even indexes by 8.
if i % 2 == 0:
my_numbers[i] = my_numbers[i] * 8
# Mutiply odd indexes by 2.
else:
my_numbers[i] = my_numbers[i] * 2
print(sum(my_numbers)) # Sum it all.
我对这个答案投了反对票,因为“双重均衡意味着检查某个事物是否相等”。运算符=
如果值相等,则返回布尔值,True
,如果值不相等,则返回False
。它通常用于if语句和条件语句中。虽然你的回答可能会对OP有所帮助,但我认为你应该彻底反思你的解释,因为它是不正确的,不幸的是我会改变这个解释。谢谢你的意见。很高兴你能理解!我只是评论了一下,因为我想避免混淆。谢谢,我这么做了,但我现在得到的是212。当我单独打印每个元素时,我看到输入的第4(x[3])和第6(x[5])个值被乘以8,尽管我在代码中指定它们应该被乘以2。为什么?谢谢大家的帮助!