Python 如何跳转到函数定义

0 投票
5 回答
3132 浏览
提问于 2025-04-16 07:39

大家好

首先,我想说我刚开始学习Python,这个是为了学校的作业,所以我希望能用简单的编程,不用高级的编程技巧和全局函数。我使用的是Python 2.6.6和WingIDE 101。

我需要一个程序,能给用户展示一个菜单。用户需要选择一个选项,然后程序会根据用户的选择来执行相应的操作。

比如,在下面的代码中(这不是实际的代码),如果用户选择了1,就会跳转到sum()这个函数。

def menu():
    print "What do you want? "
    print " 1 for sum"
    print " 2 for subtraction"
    pick = raw_input("please insert 1 or 2 ")
    if pick == "1":
       return sum()
    if pick == "2":
       return subtraction()
    else:
        menu()
menu()

def sum():
    return 8 + 4
def subtraction():
    return 8 - 4

我想知道,如何在用户做出选择后,让程序去执行一个特定的定义。

谢谢

附注 - 运行这个程序时我遇到了这个错误: Traceback (most recent call last): File "/usr/lib/wingide-101-3.2/src/debug/tserver/_sandbox.py", line 12, in File "/usr/lib/wingide-101-3.2/src/debug/tserver/_sandbox.py", line 7, in menu TypeError: sum expected at least 1 arguments, got 0

5 个回答

0

在你调用menu()的时候,sum这个东西是已经存在的。如果你把这个调用放在定义sum和subtraction之后,就不会出现这个错误了。

0

请把加法和减法的函数放在menu()函数的定义上面。你现在调用的是Python自带的sum(iterable[, start])函数。

1

这里有很多问题,我们一个一个来解决。

sum是Python里一个内置的函数,所以你不能把自己的函数命名为sum。你需要换个名字,比如sum_foo或者_sum

另外,你的代码是从上到下执行的。如果你在一个函数Y里调用了另一个函数X,

def f():
        y()
f()  
def y():
        print 'Y called'

就会出现这个错误:

NameError: global name 'y' is not defined

因为在你的程序运行时,它并不知道y是什么,因为在那时y还没有被定义,程序直接跳到了f()

要解决这个问题,你可以这样做:

def f():
        y()    
def y():
        print 'Y called'            
f() 

另外,调用函数时要用func_name(),而不是return func。而且在你的sumsubtraction函数中,你返回了值,应该把这些值保存在一个变量里,然后打印出来,或者直接打印它们。

def sum():
    return 8 + 4

没有输出

def sum():
    print 8 + 4

撰写回答