将数组中的某些元素相乘
我正在编码数学序列生成器的第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
并计算出自己的finalnumber
应152
,但这一计划因为某些原因打印28
。
请告诉我我做错了什么。
我正在使用Python 3.6。
而不是x[n] == x[n]*8
你应该写
x[n] = x[n]*8
由于双equalmark返回一个布尔值,真或假,这取决于结果作为评论提到它与如果语句,单equalmark手段通常使用分配。 当然,如果你想在第二条语句中乘以2,就会发生同样的情况。 我的意思是:
x[n] = x[n]*2
虽然,这是不是这样做的最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]
或(即使n
不0
这可能是真实的),如果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.
我downvoted这个答案,因为这个 “双equalmark意味着检查东西是否等于”。运算符'=='返回一个布尔值,如果值相等,则返回“真”;否则返回“假”。它通常用于'if-statements'和条件。虽然你的答案可能有助于(?)OP,但我认为你应该彻底重新考虑你的解释,因为这是不正确的,不幸的是 –
我会改变这个解释。感谢您的意见。 – dannyxn
很高兴你明白!我刚刚评论过,因为我想避免混淆。 –