#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