функция функций в python

76
9

Я хочу повторить код с calculateForce и далее в 5 раз, в то время как кормление назад в результатах, т.е. кормления положение и Должность1 обратно в петлю. Я думаю, что я мог бы написать функцию функции, но я никогда не делал этого раньше, и я не уверен, как это сделать.

from __future__ import print_function, division
import numpy as np
G = 10
t=5

class Particle:
def __init__(self,mass):
self.mass = mass
self.position = np.array([0,0],int)

def update():
for x in range():

def calculateForce(self,other):
Force = (G*self.mass*other.mass)/(other.position - self.position)**2
print(Force)
return(Force)

def calculateAcceleration(self,Force):
acceleration = (Force/self.mass)
print('Acceleration of particle is', acceleration)
return acceleration

def calculateAcceleration1(other, Force):
acceleration1 = (Force/other.mass)
print('Acceleration of particlce is', acceleration1)
return acceleration1

def calculateVelocity(self):
velocity = (acceleration*t)
print('Velocity of particle is', velocity)
return velocity

def calculateVelocity1(self):
velocity1 = (acceleration1*t)
print('Velocity of particle1 is', velocity1)
return velocity1

def calculatePosition(self):
position = (velocity*t)
print('Position of particle is', position)
return position

def calculatePosition1(self):
position1 = (velocity1*t)
print('Position of particle1 is', position1)
return position1

p = Particle(10)
p1 = Particle(20)
p1.position[0] = 5
p1.position[1] = 5
print(p1.position)
Force = p.calculateForce(p1)
acceleration = p.calculateAcceleration(Force)
acceleration1 = p1.calculateAcceleration1(Force)
velocity = p.calculateVelocity()
velocity1 = p.calculateVelocity1()
position = p.calculatePosition()
position1 = p.calculatePosition1()

спросил(а) 2021-01-27T23:47:29+03:00 2 месяца, 2 недели назад
1
Решение
62

Вот решение, основанное на рекурсии и итерации, в виде функции, к которой вы можете передать назначенную функцию (например, вычислениеForce, calculateAcceleration и т.д.):

#! /usr/bin/env python
from sys import argv

def myf(value):
return value*2

class C(object):
def myf2(self, value):
return value*3

def pump_rec(times, funct, value):
print "pump_rec: ", times, funct.__name__, value
if times > 1:
return funct(pump_rec(times-1, funct, value))
else:
return funct(value)

def pump_iter(times, funct, value):
while times > 0:
print "pump_iter: ", times, funct.__name__, value
value = funct(value)
times -= 1
return value

if __name__ == "__main__":
if len(argv) < 3:
print "usage: %s times value" % (argv[0],)
exit(1)
print pump_rec(int(argv[1]), myf, int(argv[2]) )
print pump_iter(int(argv[1]), myf, int(argv[2]) )
obj = C()
print pump_rec(int(argv[1]), obj.myf2, int(argv[2]) )
print pump_iter(int(argv[1]), obj.myf2, int(argv[2]) )

Запуск с

python fof.py 3 1

производит

pump_rec:  3 myf 1
pump_rec: 2 myf 1
pump_rec: 1 myf 1
8
pump_iter: 3 myf 1
pump_iter: 2 myf 2
pump_iter: 1 myf 4
8
pump_rec: 3 myf2 1
pump_rec: 2 myf2 1
pump_rec: 1 myf2 1
27
pump_iter: 3 myf2 1
pump_iter: 2 myf2 3
pump_iter: 1 myf2 9
27

ответил(а) 2021-01-27T23:47:29+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема