Python 将数组中的某些元素相乘

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(

我正在编写数学序列生成器的第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("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。为什么?谢谢大家的帮助!