Могу ли я найти другое значение с той же формулой?

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть этот код, который определяет скорость объекта, вводя «Расстояние» и «Время». Я хочу разработать код, который принимает любое значение, будь то расстояние, время или скорость, и находит соответствующее значение. Я не хочу писать код для каждого значения, и я хочу, чтобы он работал под одним кодом (см. Примечание ниже). Код:

 def speed(distance, time):
    return distance/time

distance = int(input("Enter Distance Traveled(in meters): "))
time = int(input("Enter Time Taken(in sec): ")) 

print(f'Speed of Object is: {speed(distance, time)} m/s')
 

Примечание: Это программа-макет, которую я создал для отображения более сложной ситуации, в которой я нахожусь. Формула (которую я использую в своей оригинальной программе) намного сложнее и имеет более 8 значений (в приведенном выше коде это всего 3).

Комментарии:

1. Это довольно неясно. Волшебства не происходит. Вам нужно закодировать функцию для каждого из ваших пропущенных значений, ввести остальные 2 и вычислить третье. Вы могли бы использовать какую-то символическую математику, предоставить ей уравнение и все заданные входные данные и посмотреть, сможет ли оно решить его для вас — см. f.e. scipy-lectures.org/packages/sympy.html

2. Это означает, что я должен кодировать для каждого возможного случая. Я прав?

3. Это только для Excel?

Ответ №1:

Вы можете определить три аргумента, по умолчанию заданные как None , и передать аргументы по имени. Затем, в соответствии с пропущенным значением, вычислите его. Что-то вроде:

 def calc_missing(speed=None, distance=None, time=None):
    if speed is None:
        return f'Speed of Object is: {distance/time} m/s'
    if distance is None:
        return f'distance of Object is: {speed*time} m'
    if time is None:
        return f'time of Object is: {distance/speed} s'

print(calc_missing(speed=50, time=2))
print(calc_missing(distance=50, time=2))
print(calc_missing(speed=50, distance=100))
 

Это даст:

 distance of Object is: 100 m
Speed of Object is: 25.0 m/s
time of Object is: 2.0 s
 

Ответ №2:

Я не уверен в формулировке вашего вопроса, если я полностью понимаю, чего вы хотите. Если вы ищете функцию, которая вычислит недостающий параметр в уравнении расстояния d = v * t при задании двух из трех параметров, вот решение:

 def evaluateDistanceEquation(**kargs):
    """Evaluate the distance equation dist = velocity* time
       Given two of three parameters return tuple contaioning
       all three in form (dist, vel, time) if improper inputs
       return None"""
    rslt = [kargs.pop('distance', None), kargs.pop('velocity', None), kargs.pop('time', None)]
    if rslt[0] == None:
        if rslt[1] != None and rslt[2] != None:
            rslt[0] = rslt[1]*rslt[2]
            return tuple(rslt)
        else:
            return None
    if rslt[2] == None:
        if rslt[0] != None and rslt[1] != None:
            rslt[2] = rslt[0]/rslt[1]
            return tuple(rslt)
        else:
            return None
    if rslt[0] != None and rslt[2] != None:
        if rslt[0] != None and rslt[2] != None:
            rslt[1] = rslt[0]/rslt[2]
            return tuple(rslt)
        else:
            return None         
 

Теперь, если вы выполните (например):

 distvals = evaluateDistanceEquation(distance = 12, time= 2.4)
if distvals:
    print(f"The Result of dist evaluation is Dist= {distvals[0]}, Velocity= {distvals[1]}. Time= {distvals[2]}")
else:
    print('Error must provide two out of three parameters from distance, velocity, and time')   
 

вы вернетесь:

 The Result of dist evaluation is Dist= 12, Velocity= 5.0. Time= 2.4
 

и если вы выполните:

 distvals = evaluateDistanceEquation(velocity= 5.0)
if distvals:
    print(f"The Result of dist evaluation is Dist= {distvals[0]}, Velocity= {distvals[1]}. Time= {distvals[2]}")
else:
    print('Error must provide two out of three parameters from distance, velocity, and time')  
    
 

Результат будет:

 Error must provide two out of three parameters from distance, velocity, and time