Python 中的三元布尔运算
Maths with Ternary Boolean in Python
我写了这个小脚本来计算狗年。前两个狗年是 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)
虽然问题没有明确表达,但您似乎正在寻找存储函数并有条件地调用这些函数的方法。
Good news is that, in python functions are first class object.
所以你可以这样做 -
>>> 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
为了进一步回应 OP 的评论,lambda 在这里无论如何都不是必需的。以下是具有简单功能的相同代码 -
>>> 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 和几乎所有现代编程语言进行简短的抨击 -
In modern programming languages, Why are there so many ways to do the same thing?
Python 禅,不。 13,州 -
There should be one-- and preferably only one --obvious way to do it.
然而,有多种方法可以达到相同的效果。我真的希望现代编程语言能消除添加尽可能多的功能的诱惑,而是专注于更好地完成最重要的工作——速度、工具、更好的版本控制、框架。
我来自 'C' 背景,我相信它是迄今为止创造的最好的编程语言。
我写了这个小脚本来计算狗年。前两个狗年是 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)
虽然问题没有明确表达,但您似乎正在寻找存储函数并有条件地调用这些函数的方法。
Good news is that, in python functions are first class object.
所以你可以这样做 -
>>> 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
为了进一步回应 OP 的评论,lambda 在这里无论如何都不是必需的。以下是具有简单功能的相同代码 -
>>> 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 和几乎所有现代编程语言进行简短的抨击 -
In modern programming languages, Why are there so many ways to do the same thing?
Python 禅,不。 13,州 -
There should be one-- and preferably only one --obvious way to do it.
然而,有多种方法可以达到相同的效果。我真的希望现代编程语言能消除添加尽可能多的功能的诱惑,而是专注于更好地完成最重要的工作——速度、工具、更好的版本控制、框架。
我来自 'C' 背景,我相信它是迄今为止创造的最好的编程语言。