封装函数有关的问题
本帖最后由 可乐与酱油 于 2018-12-10 14:33 编辑鱼c论坛的各位大佬好,我是一名大一新生,在电子设计课讲七段数码管显示的启发下,我参照书上代码结合我自己的学习编了一段程序
程序如下:
#七段数码管绘制
import turtle
import time
def preset():
turtle.pensize(5) #预设
turtle.hideturtle()
turtle.speed(100)
turtle.pu()
turtle.fd(-300)
def drawLine(): #划一笔
turtle.pu()
turtle.fd(10)
turtle.pendown()
turtle.fd(30)
turtle.pu()
turtle.fd(10)
turtle.pd()
def drawNone(): #不画
turtle.pu()
turtle.fd(50)
turtle.pd()
def drawNum(): #画一个数字(按照画的顺序编号)
drawLine() if a else drawNone()
turtle.right(90)
drawLine() if b else drawNone()
turtle.right(90)
drawLine() if c else drawNone()
turtle.right(90)
drawLine() if d else drawNone()
drawLine() if e else drawNone()
turtle.right(90)
drawLine() if f else drawNone()
turtle.right(90)
drawLine() if g else drawNone()
def skip(): #画完一个数字后前进一小点
turtle.right(90)
turtle.pu()
turtle.fd(10)
turtle.pd()
def gang(): #划一杠
turtle.right(90)
turtle.pu()
turtle.fd(5)
turtle.pd()
turtle.fd(5)
turtle.pu()
turtle.fd(5)
turtle.pd()
def judge(num): #真值赋予七个字母
a = 1 if num in (2,3,4,5,6,8,9) else 0
b = 1 if num in (0,1,3,4,5,6,7,8,9) else 0
c = 1 if num in (0,2,3,5,6,8,9) else 0
d = 1 if num in (0,2,6,8) else 0
e = 1 if num in (0,4,5,6,8,9) else 0
f = 1 if num in (0,2,3,5,6,7,8,9) else 0
g = 1 if num in (0,1,2,3,4,7,8,9) else 0
def main():
preset() #预设
num1=time.strftime('%H-%M-%S')#获取当前时间
for each in num1:
if each == '-': #如果不是数字
gang()
else: #如果是数字
each=eval(each)
judge(each)
drawNum()
skip()
turtle.reset()
while 1:
main()
然后运行结果
Traceback (most recent call last):
File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 74, in <module>
main()
File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 70, in main
drawNum()
File "C:\Users\wzl\Desktop\不知道出了啥bug的时间绘制程序.py", line 23, in drawNum
drawLine() if a else drawNone()
NameError: name 'a' is not defined
我试了一下,可能是
judge(each)
没有给七个字母赋上值,但我怎么也想不通。{:9_220:}
我还尝试了下如果这么写
a = 1 if num in (2,3,4,5,6,8,9) else 0
就可以给a赋上值
可能是封装函数用错了,但就是找不到问题所在。
这究竟是什么原因???
{:9_234:} {:9_234:} {:9_234:}
你需要global
a在judge里被赋值了,然而在judge外侧并没有用 你的a定义在函数里,却要在别的函数里调用 你这是在写python吗,这缩进,这语法。。。我看不懂啊 xy123151 发表于 2018-12-10 15:25
你这是在写python吗,这缩进,这语法。。。我看不懂啊
呃,我刚学没多久,之前都是抄书上的代码,犯错误应该是难免的{:10_266:},然后请问能否告诉我具体哪个地方有错误呢? 本帖最后由 可乐与酱油 于 2018-12-10 17:31 编辑
xy123151 发表于 2018-12-10 15:21
你需要global
a在judge里被赋值了,然而在judge外侧并没有用
就是说封装函数的时候,被封装的函数里边定义的变量不能在函数外面用,是吗? 塔利班 发表于 2018-12-10 15:24
你的a定义在函数里,却要在别的函数里调用
谢谢 先在全局定义下abcdefg,然后在那个函数里加一句
global a,b,c,d,e,f,g xy123151 发表于 2018-12-10 17:42
先在全局定义下abcdefg,然后在那个函数里加一句
global a,b,c,d,e,f,g
谢谢,我知道了,做出来了{:10_250:}
页:
[1]