省流助手:
解决办法:试试把报未定义的函数放在main函数前面
解题过程:
这几天因为项目作业需要,在b站上找了个Python教程想入入门
网课传送门(非广告)
好不容易,看到了最后的实战项目——学生信息管理系统
照着老师敲完第137节的代码,一运行发现报错,说未定义
我不理解,于是求助大佬同学,大佬说要不你把menu函数移到main函数前面看看?
我觉得这很扯,因为按照之前C、C#、C++的编程经验,似乎一个文件里面函数都可以互相找到,没有这么严格的顺序要求的,所以就主观否定了这种可能的原因,一开始没有去这么改(这样不对!千万不能过于经验主义墨守成规)
但是不得不说,确实把menu函数换了个位置,他就活了。
然后为了弄明白为什么会这样,我又去查了一下其他码友遇到的类似困难:
https://www.it1352.com/1670921.html
https://ask.csdn.net/questions/362761?locationNum=8&fps=1
看起来像是没有声明,直接就把定义写在主函数后面使用造成的
为了验证我的猜想,我又把menu函数放了回去,试着用C语言的办法先开头声明然后定义,但是他报错······
(是的,我居然没想到C语言能乱序写是因为函数都是有声明的,而C#、C++人家自己函数都在一个类的{}里面,我猜测应该跟这些结构有关系我才能把函数顺序写的那么随意······)
然后我又去百度python函数应该怎么声明,也没找出个明确的答案······
没关系,下次注意不要把要用的函数定义放后面就行了,既然暂时找不到一劳永逸的办法,就自己写的时候注意点吧。
完整代码:
def menu():
print('==========================学生信息管理系统===============================')
print('------------------------------功能菜单--------------------------------')
print('\t\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t\t2.查找入学生信息')
print('\t\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t\t5.排序')
print('\t\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t\t0.退出')
print('==========================学生信息管理系统===============================')
def main():
while True:
menu()
choice=int(input('请选择'))
if choice in[0,1,2,3,4,5,6,7]:
if choice==0:
answer=input('您确定要退出系统吗?y/n')
if answer=='y' or answer=='Y':
print('谢谢您的使用!!!')
break #退出系统
else:
continue;
elif choice==1:
insert() #录入学生信息
elif choice==2:
search()
elif choice==3:
delete()
elif choice==4:
modify()
elif choice==5:
sort()
elif choice==6:
total()
elif choice==7:
show()
def insert():
pass
def search():
pass
def delete():
pass
def modify():
pass
def sort():
pass
def total():
pass
def show():
pass
if __name__ =='__main__':
main()