根据变量值调用不同的函数

时间:2019-01-02 11:23:49

标签: python python-3.x

我总共有500个浮点数,我想在每个浮点数上运行if语句并相应地调用函数

我的代码是这样的:

x1 = .2
x2 = .33
x3 = -.422
x4 = -1

def function1():
    print("x1 is positive")

def function2():
    print("x2 is positive")

def function3():
    print("x3 is positive")

def function4():
    print("x4 is positive")

for x in range(10):    
    if x1 > 0:
        function1()

    if x2 > 0:
        function2()

    if x3 > 0:
        function3()

    if x4 > 0:
        function4()  

我想要一种更有效的方法,否则我必须为所有变量写if语句

2 个答案:

答案 0 :(得分:1)

您应该以tutorial(s)来了解python编码-这个问题在python来说是非常的基本知识。

创建一个检查变量并输出正确内容的函数:

x1 = .2
x2 = .33
x3 = -.422
x4 = -1

def check_and_print(value, variablename):
    """Checks if the content of value is smaller, bigger or euqal to zero. 
    Prints text to console using variablename."""
    if value > 0:
        print(f"{variablename} is positive")
    elif value < 0:
        print(f"{variablename} is negative")
    else:
        print(f"{variablename} is zero")

check_and_print(x1, "x1")
check_and_print(x2, "x2")
check_and_print(x3, "x3")
check_and_print(x4, "x4")
check_and_print(0, "carrot") # the given name is just printed

输出:

x1 is positive
x2 is positive
x3 is negative
x4 is negative
carrot is zero

您可以通过使用list中的tuples并在其上循环来进一步缩短代码:

for value,name in [(x1, "x1"),(x2, "x2"),(x3, "x3"),(x4, "x4"),(0, "x0")]:
    check_and_print(value,name)  # outputs the same as above

Doku:

答案 1 :(得分:0)

如果数据没有存储在x1x2,... x500等一堆单独命名的变量中,则执行所需的操作会容易得多。正如您在评论中指出的那样。

如果这些值在这样的列表中:

values = [.2, .33, -.422, -1, .1, -.76, -.36, 1, -.6, .73, .22, .5,  # ... ,
         ]

然后可以通过for循环中反复调用的单个函数来处理它们,如下所示:

def check_value(index, value):
    if value > 0:
        print('x{} is positive'.format(index+1))

for i, value in enumerate(values):
    check_value(i, value)

您还没有指出数据的来源,但我怀疑它是由某种自动化过程生成的。如果您可以控制操作方式,那么更改内容应该不会太难,因此值以列表的建议形式出现。