我是Python的入门者。我需要帮助。 我收到一个起点(在这种情况下为(2,0)),并且必须将两个数字相加。例如(2,0)+(1,1)=(3,1)。 我必须继续这样做,直到获得列表的最大值(在这种情况下为5)元素为止。
但是我有一个问题。我无法循环播放并不断更新列表。 该函数必须使用任何值。有人能帮我吗? 这是我所拥有的(知道这是错误的,但是我被卡住了):
def summ(a, b):
return (a[0] + b[0], a[1] + b[1])
x= (((5), (2,0), (1,1)))
maxx= x[0] #max of elements in list
start= x[1] #starting point
direction= x[2] #what it must sum
def position(x):
new_list= ()
for i in x:
new_list = start, summ(start, direction)
new_list += (summ(new_list[-1], direction), )
if len(new_list) == maxx:
break
return new_list
#the output I had
((2, 0), (3, 1), (4, 2))
#the output I need
((2, 0), (3, 1), (4, 2), (5, 3), (6, 4)) #5 elements, maxx
答案 0 :(得分:-1)
让我们接受@StephenRauch的明智建议并移动:
new_list = start, summ(start, direction)
在for
循环之外的。并像我们一样清理代码:
def summ(a, b):
return a[0] + b[0], a[1] + b[1]
def position(argument):
maxx, start, direction = argument
new_list = [start]
for _ in range(maxx - len(new_list)):
new_list.append(summ(new_list[-1], direction))
return tuple(new_list)
print(position(((5), (2, 0), (1, 1))))
输出
> python3 test.py
((2, 0), (3, 1), (4, 2), (5, 3), (6, 4))
>
现在让我们从代码中获得更多乐趣,而不是重新发明矢量算法,我们将从Python turtle导入Vec2D
。并返回一个list
对我来说比tuple
更有意义:
from turtle import Vec2D
def position(argument):
maxx, start, direction = argument
return [start + n * direction for n in range(maxx)]
print(position(((5), Vec2D(2, 0), Vec2D(1, 1))))
输出
> python3 test2.py
[(2.00,0.00), (3.00,1.00), (4.00,2.00), (5.00,3.00), (6.00,4.00)]
>
答案 1 :(得分:-1)
使用列表理解:
a = ((5,), (2,0), (1,1))
b = [(a[1][0] + i*a[2][0], a[1][1] + i*a[2][1]) for i in range(a[0][0])]
答案 2 :(得分:-2)
def summ(a, b):
return a[0] + b[0], a[1] + b[1]
x = 5, (2, 0), (1, 1)
def position(x):
i = 1
new_list = [x[i]]
while i < x[0]:
new_list += summ(new_list[i - 1], x[2]),
i = i + 1
return new_list
print(position(x))
经过测试,输出是
[(2,0),(3,1),(4,2),(5,3),(6,4)]