设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 15916|回复: 2
打印 上一主题 下一主题

新手求教用定义main()函数的问题

[复制链接]

3

主题

0

好友

29

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2018-1-29 20:04:01 |只看该作者 |倒序浏览
各位大神好,求解答。
如图所示,请问为什么在定义了main()主函数后,程序出现错误呢?
谢谢~

1.png (59.06 KB, 下载次数: 372)

main()

main()

2.png (57.57 KB, 下载次数: 367)

main()得到错误结果

main()得到错误结果

3.png (63.15 KB, 下载次数: 384)

修改后,去除main()

修改后,去除main()

4.png (25.16 KB, 下载次数: 379)

成功

成功

回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2018-1-30 11:21:15 |只看该作者
应该是全局变量,和局部变量的原因,相关链接https://www.cnblogs.com/Archmage/p/7569817.html

首先你用main()时,定义的三个函数内,各自的变量都是函数内的局部变量,也就是说print_grades(names)函数中的grades[name]是没法直接使用其他函数中的结果、是没有预先定义的,再运行main()时,grades,names = dict()是在def main()中运行得到的,也就是说,grades是main()中的局部变量,那么print_grades函数并不能够把它当作全局变量来直接调用,导致报错原因就是 global name 'grades'没有定义;

而不用main时,第一句grades,names = dict()其实是在全局中定义了grades,也就是全局变量了,之后调用不会报错了。

修改方法的话,可以在def print_grades(names):中加一句,global grades,将其中的grades标明为全局变量,然后再执行for循环
回复

使用道具 举报

3

主题

0

好友

29

积分

新手上路

Rank: 1

板凳
发表于 2018-1-30 12:46:28 |只看该作者
TED 发表于 2018-1-30 11:21
应该是全局变量,和局部变量的原因,相关链接https://www.cnblogs.com/Archmage/p/7569817.html

首先你用m ...

懂了懂了,就是要在print_grades()这个函数里,也必须要调用grades才行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 10:25 , Processed in 0.015466 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部