我正在编码数学序列生成器的第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。
答案 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
个数字。现在是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