将数组中的某些元素相乘

将数组中的某些元素相乘

问题描述:

我正在编码数学序列生成器的第n项。我现在只是试验前七个术语。将数组中的某些元素相乘

用户在序列中输入1,2,3,4,5,6 and 7(或任何其他连续的值),然后程序应该乘以第一个,然后乘以8输入的其他所有项(因此在这种情况下输入的第一,第三,第五和第七个数字) 。

它也应该乘以第二个,然后每隔一个输入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 and 7并计算出自己的finalnumber152,但这一计划因为某些原因打印28

请告诉我我做错了什么。

我正在使用Python 3.6。

而不是x[n] == x[n]*8 你应该写

x[n] = x[n]*8 

由于双equalmark返回一个布尔值,真或假,这取决于结果作为评论提到它与如果语句,单equalmark手段通常使用分配。 当然,如果你想在第二条语句中乘以2,就会发生同样的情况。 我的意思是:

x[n] = x[n]*2 
+0

我downvoted这个答案,因为这个 “双equalmark意味着检查东西是否等于”。运算符'=='返回一个布尔值,如果值相等,则返回“真”;否则返回“假”。它通常用于'if-statements'和条件。虽然你的答案可能有助于(?)OP,但我认为你应该彻底重新考虑你的解释,因为这是不正确的,不幸的是 –

+0

我会改变这个解释。感谢您的意见。 – dannyxn

+0

很高兴你明白!我刚刚评论过,因为我想避免混淆。 –

虽然,这是不是这样做的最Python的方式,但也有你的代码有两个主要的错误。

  • 首先,在if条件内,您需要检查每个值。所以,用if (x[n] == x[0]) or (x[n] == x[2]) or (x[n] == x[4]) or (x[n] == x[6]):

  • 更换x[n] == x[0] or x[2] or x[4] or x[6]:其次,您需要使用assignment operator (=)而是采用comparison operator (==)条件块中。所以,用x[n] = x[n]*2

你越来越28作为结果的原因更换x[n] == x[n]*2因为x[n] = int(input("Input the digits of the sequence one by one:"))将分配值x作为[1,2,3,4,5,6,7],并在您如果 - 其他块,没有任何类型的任务。因此,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) 

这将导致:

152 

另外,如果你想这样做有点Python的方式,你可以这样做:

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 

您误差主要来源于你把你的循环内的条件的方式 -

if x[n] == x[0] or x[2] or x[4] or x[6] 

将检查x[n] == x[0](即使n0这可能是真实的),如果x[2]是正面(无论x[n]如果x[4]为正等。

  • 注意,or表达之间的分离,而不是用作英语,其中a is b or c or d意味着a is b, or a is c, or a is d,但a is b, or c is true, or d is true

针对多个值进行比较正确的方法是if n in [0, 2, 4, 6],检查天气n是在该列表中的一个值。

但是,对于您的情况,如果您想过滤奇数和偶数,则不需要硬编码数字。只需进行奇偶校验 - if x % 2 == 0涵盖所有情况。


现在,让我们重新审查你的规格:

  • 输入n号码。
  • 乘奇数指数由2
  • 乘甚至通过索引8
  • 琛这一切。

现在蟒蛇风格:

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.