将数组中的某些元素相乘

时间:2017-04-02 19:07:24

标签: python

我正在编码数学序列生成器的第n个术语。我现在只是尝试前七个学期。

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

它也应该乘以2,然后乘以2输入的每个其他项(所以在这种情况下输入第2,第4和第6个数字)。

之后,我希望它能将所有内容添加到一起。这是我试图做的:

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。

3 个答案:

答案 0 :(得分:1)

您的错误主要源于您将条件置于循环中的方式 -

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。
  • 总结一下。

现在是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.

答案 1 :(得分:0)

而不是def pytest_addoption(parser): # pragma: no cover """Pytest hook to add custom command line option(s).""" group = parser.getgroup("Test", "My test option") group.addoption( "--stack", help="stack", metavar="stack", dest='stack', default=None) 你应该写

x[n] == x[n]*8

因为双等号返回bool,True或False,它取决于注释中提到的结果,它通常用于 if 语句,单个等号表示赋值。 当然,当你想在第二个语句中乘以2时会发生同样的情况。 我的意思是:

x[n] = x[n]*8

答案 2 :(得分:0)

尽管如此,这并不是最常用的方式,但您的代码存在两个主要错误。

  • 首先,在if条件中,您需要检查每个值。因此,请将x[n] == x[0] or x[2] or x[4] or x[6]:替换为if (x[n] == x[0]) or (x[n] == x[2]) or (x[n] == x[4]) or (x[n] == x[6]):

  • 其次,您需要使用assignment operator ( = )而不是在条件块中使用comparison operator ( == )。因此,请将x[n] == x[n]*2替换为x[n] = x[n]*2

您获得28因为x[n] = int(input("Input the digits of the sequence one by one:"))会将值分配给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)

这将导致:

152

或者,如果你想做一点pythonic方式,你可以做这样的事情:

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