首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的局部变量的值不变,尽管在我的函数中调用了?

为什么我的局部变量的值不变,尽管在我的函数中调用了?
EN

Stack Overflow用户
提问于 2019-02-14 12:10:59
回答 2查看 57关注 0票数 0

在我正在尝试创建的程序中,我使用Turtle创建了一个12小时数字闹钟,其中每个数字(hh:mm)都会发生变化,就像时钟是在24小时内运行一样。然而,我用来设置分钟数和一个人的位置时针的一些变量的值没有变化,即使我已经将它们设置为在满足特定条件时将它们相加。

所以基本上,我已经设置了乌龟来画一张桌子,在桌子上画时钟的身体和表面。但更重要的是,我做了6个乌龟,一个是小时数和分钟数之间的点,一个是AM/PM点,一个是每个数字。它们都是由我上面描述的每个海龟的单独函数绘制的。我有一个单独的.txt文档,其中行为5位,对应于每个数字需要更改的点。使用AM/PM和10的位小时数函数,我设置了一个基本的if和else语句,其中,如果与该特定函数对应的位为0,则10的位应为0,或者如果位为1,则为1。但是,对于其余的数字,如果位为0,则相应的函数将重复上次绘制,并将其保存在自己的函数中。如果位是1,它将被保存在一个变量中,然后在与另一个变量的模运算中使用,该变量将产生一个与下一个循环或旋转数字相对应的数字。例如,对于一个人的位置分针,可以出现的数字是0、1、2、3、4、5、6、7、8和9。如果模运算结果是3,那么数字将是3。同样,3将保存在变量中,以便当位作为0出现时,函数可以显示之前的数字。另外,如果模运算结果是0,那么我在模函数中描述的第二个变量每次都会加上一个特定的数字。在一个人的位置分针的情况下,这个数字是10,就是这样。我的代码如下:

代码语言:javascript
复制
#Program Setup
import turtle
import time
num = turtle.Turtle()
num2 = turtle.Turtle()
num3 = turtle.Turtle()
num4 = turtle.Turtle()
text = turtle.Turtle()
binlist = []
com = 12
com1 = 6
com2 = 10
bits = 0
bits1 = 0
bits2 = 0
#Function Setup
def hour1(bit1,g):
    if int(bit1) == 0:
        num.clear()
        g = num.write("0",False,"center",("alarm clock",100,"normal"))
    else:
        num.clear()
        g = num.write("1",False,"center",("alarm clock",100,"normal"))
def hour2(bit2,g1,bits,com):
    if int(bit2) == 0:
        num2.clear()
        g1
    else:
        bits +=1
        return bits
        if int(bits) % int(com) == 1:
            num2.clear()
            g1 = num2.write("1",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 2:
            num2.clear()
            g1 = num2.write("2",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 3:
            num2.clear()
            g1 = num2.write("3",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 4:
            num2.clear()
            g1 = num2.write("4",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 5:
            num2.clear()
            g1 = num2.write("5",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 6:
            num2.clear()
            g1 = num2.write("6",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 7:
            num2.clear()
            g1 = num2.write("7",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 8:
            num2.clear()
            g1 = num2.write("8",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 9:
            num2.clear()
            g1 = num2.write("9",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 10:
            num2.clear()
            g1 = num2.write("0",False,"center",("alarm clock",100,"normal"))
        elif int(bits) % int(com) == 11:
            num2.clear()
            g1 = num2.write("1",False,"center",("alarm clock",100,"normal"))
        else:
            num2.clear()
            g1 = num2.write("2",False,"center",("alarm clock",100,"normal"))
            com += 12
            return com
def min1(bit3,g2,bits1,com1):
    if int(bit3) == 0:
        num3.clear()
        g2
    else:
        bits1 += 1
        return bits1
        if int(bits1) % int(com1) == 1:
            num3.clear()
            g2 = num3.write("1",False,"center",("alarm clock",100,"normal"))
        elif int(bits1) % int(com1) == 2:
            num3.clear()
            g2 = num3.write("2",False,"center",("alarm clock",100,"normal"))
        elif int(bits1) % int(com1) == 3:
            num3.clear()
            g2 = num3.write("3",False,"center",("alarm clock",100,"normal"))
        elif int(bits1) % int(com1) == 4:
            num3.clear()
            g2 = num3.write("4",False,"center",("alarm clock",100,"normal"))
        elif int(bits1) % int(com1) == 5:
            num3.clear()
            g2 = num3.write("5",False,"center",("alarm clock",100,"normal"))
        else:
            num3.clear()
            g2 = num3.write("0",False,"center",("alarm clock",100,"normal"))
            com1 += 6
            return com1
def min2(bit4,g3,bits2,com2):
    if int(bit4) == 0:
        g3
    else:
        bits2 += 1
        return bits2
        if int(bits2) % int(com2) == 1:
            num4.clear()
            g3 = num4.write("1",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 2:
            num4.clear()
            g3 = num4.write("2",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 3:
            num4.clear()
            g3 = num4.write("3",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 4:
            num4.clear()
            g3 = num4.write("4",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 5:
            num4.clear()
            g3 = num4.write("5",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 6:
            num4.clear()
            g3 = num4.write("6",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 7:
            num4.clear()
            g3 = num4.write("7",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 8:
            num4.clear()
            g3 = num4.write("8",False,"center",("alarm clock",100,"normal"))
        elif int(bits2) % int(com2) == 9:
            num4.clear()
            g3 = num4.write("9",False,"center",("alarm clock",100,"normal"))
        else:
            num4.clear()
            g3 = num4.write("0",False,"center",("alarm clock",100,"normal"))
            com2 += 10
            return com2
def meridiem(bit5,g4):
    if int(bit5) == 0:
        text.clear()
        g4 = text.write("AM",False,"center",("alarm clock",25,"normal"))
    else:
        text.clear()
        g4 = text.write("AM",False,"center",("alarm clock",25,"normal"))
f = open("ikeokereke.txt","r")
for line in f:
    binlist.append(line.rstrip('\n'))
for e in binlist:
    bit1 = e[0:1]
    bit2 = e[1:2]
    bit3 = e[2:3]
    bit4 = e[3:4]
    bit5 = e[4:5]
    time.sleep(.5)
    hour1(bit1,g)
    hour2(bit2,g1,bits,com)
    min1(bit3,g2,bits1,com1)
    min2(bit4,g3,bits2,com2)
    meridiem(bit5,g4)
    print(bits)
    print(bits1)
    print(bits2)
    print(com)
    print(com1)
    print(com2)

预期结果:正常工作的数字闹钟实际结果:10的位置时针显示为0,1的位置分针显示为0,其他两个数字甚至根本不显示。

ikeokereke.txt

https://docs.google.com/document/d/e/2PACX-1vT6O_NqKrKR0tC8IPvoItwmJL0uCgbUJsBK0xH62IHAfx_nJxD62DuKjc8Ih93YyMKsNGn0EP6Nxu6Q/pub

EN

Stack Overflow用户

发布于 2019-02-15 01:44:43

即使是这一小段代码也有很多问题:

代码语言:javascript
复制
def hour2(bit2,g1,bits,com):
    if int(bit2) == 0:
        num2.clear()
        g1
    else:
        bits +=1
        return bits
        if int(bits) % int(com) == 1:
            ...

具体地说:

  • g1从来没有在任何地方定义过,所以调用hour2(bit2,g1,bits,com)不能工作。
  • g1有没有任何可能的值,将g1单独放在一行中作为code?
  • incrementing bits的一部分,然后返回它是没有意义的,因为没有任何东西查看hour2()调用的返回值,如果bits是作为全局变量的话。这是行不通的,因为在function.
  • the中没有global语句,在return bits语句之后的大约30行代码永远不会被执行,因为您已经离开了function.
  • both bitscom已经是整数了,所以一次又一次地调用int()似乎表明您对自己的设计缺乏理解。
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54683104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档