Математика с тройным логическим значением в Python - PullRequest
1 голос
/ 30 апреля 2020

Я написал этот маленький скрипт для подсчета лет собак. Первые два собачьих года - это 10,5 человеческих года, а все последующие годы стоят 4.

human_age = int(input("Enter the human age to convert it to doggy years: "))
    valid = (human_age <=2)
    def convert_to_dog_years(human_age):
        if valid:
            dog_years = human_age * 10.5
            print('Dog age is:', int(dog_years))
        elif not valid:
            dog_years = ((((human_age - 2) * 4) + 21))
            print('Dog age is:', int(dog_years))
    convert_to_dog_years(human_age)

Я подумал кое-что еще об этом: я хотел бы указать математические операции, дав им два имени одно для цифры от 0-2 и другие от 2 и выше. Затем я хотел бы использовать логическое значение, чтобы решить, какой математический процесс я хочу применить.

Возможно ли это в python?

0-2    = dog_years = human_age * 10.5
>=2    = dog_years = ((((human_age - 2) * 4) + 21))

human_age = int(input("Enter the human age to convert it to doggy years: "))
valid = (human_age <=2)
def convert_to_dog_years(human_age):
    if valid 0-2 else 2&up
        print('Dog age is:', int(dog_years))
convert_to_dog_years(human_age)

1 Ответ

3 голосов
/ 30 апреля 2020

Хотя вопрос четко не сформулирован, кажется, вы ищете способы хранения функций и их условного вызова.

Хорошая новость заключается в том, что в python функции являются объектами первого класса .

Таким образом, вы можете сделать что-то вроде этого -

>>> handlers={
...  'valid':lambda human_age:human_age * 10.5,
...  'invalid': lambda human_age:((((human_age - 2) * 4) + 21))}
>>> handler_key = 'valid' if human_age <=2 else 'invalid'
>>> human_age=3 #In your case, take input here
>>> print(handlers[handler_key](human_age)) #call handler
25

Чтобы еще больше ответить на комментарий ОП, лямбда-выражения здесь не нужны. Ниже приведен тот же код с простыми функциями -

>>> def invalid_handler(human_age): return ((((human_age - 2) * 4) + 21))
... 
>>> def valid_handler(human_age): return human_age * 10.5
... 
>>> handlers = {
...  'valid': valid_handler,
...  'invalid': invalid_handler}
>>> 
>>> print(handlers[handler_key](human_age))
25
>>> human_age=1
>>> print(handlers[handler_key](human_age))
17

Я бы также воспользовался этой возможностью для краткого разговора с python и почти со всеми современными языками программирования в целом -

В современных языках программирования, почему существует так много способов сделать то же самое?

Python Zen, нет. 13, состояния -

Должен быть один - и предпочтительно только один - очевидный способ сделать это.

Тем не менее, есть несколько способов добиться того же Результаты. Я действительно с 1033 * современными языками программирования избавляюсь от соблазна добавить как можно больше функций и вместо этого сосредоточиться на том, чтобы лучше выполнять самую важную работу - скорость, инструменты, лучшее управление версиями, фреймворки.

Я родом из 'C' и считаю, что это лучший язык программирования, созданный до настоящего времени.

...