鱼C论坛

 找回密码
 立即注册
查看: 2908|回复: 8

[已解决]封装函数有关的问题

[复制链接]
发表于 2018-12-10 14:29:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 可乐与酱油 于 2018-12-10 14:33 编辑

鱼c论坛的各位大佬好,我是一名大一新生,在电子设计课讲七段数码管显示的启发下,我参照书上代码结合我自己的学习编了一段程序
程序如下:


  1. #七段数码管绘制
  2. import turtle
  3. import time
  4. def preset():                                                
  5.          turtle.pensize(5)                   #预设
  6.          turtle.hideturtle()
  7.          turtle.speed(100)
  8.          turtle.pu()
  9.          turtle.fd(-300)
  10. def drawLine():                              #划一笔
  11.          turtle.pu()
  12.          turtle.fd(10)
  13.          turtle.pendown()
  14.          turtle.fd(30)
  15.          turtle.pu()
  16.          turtle.fd(10)
  17.          turtle.pd()
  18. def drawNone():                             #不画
  19.          turtle.pu()
  20.          turtle.fd(50)
  21.          turtle.pd()
  22. def drawNum():                               #画一个数字(按照画的顺序编号)
  23.          drawLine() if a else drawNone()
  24.          turtle.right(90)
  25.          drawLine() if b else drawNone()
  26.          turtle.right(90)
  27.          drawLine() if c else drawNone()
  28.          turtle.right(90)
  29.          drawLine() if d else drawNone()
  30.          drawLine() if e else drawNone()
  31.          turtle.right(90)
  32.          drawLine() if f else drawNone()
  33.          turtle.right(90)
  34.          drawLine() if g else drawNone()
  35. def skip():                                      #画完一个数字后前进一小点
  36.          turtle.right(90)
  37.          turtle.pu()
  38.          turtle.fd(10)
  39.          turtle.pd()
  40. def gang():                                  #划一杠
  41.          turtle.right(90)
  42.          turtle.pu()
  43.          turtle.fd(5)
  44.          turtle.pd()
  45.          turtle.fd(5)
  46.          turtle.pu()
  47.          turtle.fd(5)
  48.          turtle.pd()



  49.          
  50. def judge(num):                              #真值赋予七个字母
  51.          a = 1 if num in (2,3,4,5,6,8,9) else 0
  52.          b = 1 if num in (0,1,3,4,5,6,7,8,9) else 0
  53.          c = 1 if num in (0,2,3,5,6,8,9) else 0
  54.          d = 1 if num in (0,2,6,8) else 0
  55.          e = 1 if num in (0,4,5,6,8,9) else 0
  56.          f = 1 if num in (0,2,3,5,6,7,8,9) else 0
  57.          g = 1 if num in (0,1,2,3,4,7,8,9) else 0
  58. def main():
  59.          preset()                                     #预设
  60.          num1=time.strftime('%H-%M-%S')  #获取当前时间
  61.          for each in num1:
  62.                   if each == '-':                   #如果不是数字
  63.                            gang()
  64.                   else:                               #如果是数字
  65.                            each=eval(each)
  66.                            judge(each)
  67.                            drawNum()
  68.                   skip()
  69.          turtle.reset()
  70. while 1:
  71.          main()
复制代码


然后运行结果


  1. Traceback (most recent call last):
  2.   File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 74, in <module>
  3.     main()
  4.   File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 70, in main
  5.     drawNum()
  6.   File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 23, in drawNum
  7.     drawLine() if a else drawNone()
  8. NameError: name 'a' is not defined
复制代码



我试了一下,可能是

  1. judge(each)
复制代码



没有给七个字母赋上值,但我怎么也想不通。
我还尝试了下如果这么写

  1. a = 1 if num in (2,3,4,5,6,8,9) else 0
复制代码


就可以给a赋上值
可能是封装函数用错了,但就是找不到问题所在。
这究竟是什么原因???

最佳答案
2018-12-10 15:21:26
你需要global
a在judge里被赋值了,然而在judge外侧并没有用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-10 15:21:26 | 显示全部楼层    本楼为最佳答案   
你需要global
a在judge里被赋值了,然而在judge外侧并没有用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 15:24:23 | 显示全部楼层
你的a定义在函数里,却要在别的函数里调用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 15:25:27 | 显示全部楼层
你这是在写python吗,这缩进,这语法。。。我看不懂啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 17:24:21 From FishC Mobile | 显示全部楼层
xy123151 发表于 2018-12-10 15:25
你这是在写python吗,这缩进,这语法。。。我看不懂啊

呃,我刚学没多久,之前都是抄书上的代码,犯错误应该是难免的,然后请问能否告诉我具体哪个地方有错误呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 17:29:51 From FishC Mobile | 显示全部楼层
本帖最后由 可乐与酱油 于 2018-12-10 17:31 编辑
xy123151 发表于 2018-12-10 15:21
你需要global
a在judge里被赋值了,然而在judge外侧并没有用


就是说封装函数的时候,被封装的函数里边定义的变量不能在函数外面用,是吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 17:32:25 From FishC Mobile | 显示全部楼层
塔利班 发表于 2018-12-10 15:24
你的a定义在函数里,却要在别的函数里调用

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 17:42:16 | 显示全部楼层
先在全局定义下abcdefg,然后在那个函数里加一句
global a,b,c,d,e,f,g
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 18:10:04 From FishC Mobile | 显示全部楼层
xy123151 发表于 2018-12-10 17:42
先在全局定义下abcdefg,然后在那个函数里加一句
global a,b,c,d,e,f,g

谢谢,我知道了,做出来了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表