首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新此代码中的变量?

如何更新此代码中的变量?
EN

Stack Overflow用户
提问于 2020-02-15 11:27:17
回答 1查看 85关注 0票数 3

我希望能够打印和更新从一个小型GPS实时检索的值。不管出于什么原因,代码不会更新GPS值,并且只会打印相同的值,直到我重新启动代码。我的猜测是变量不能更新,但我不知道如何修复它。

代码语言:javascript
复制
while ser.inWaiting() > 0:
decoded = (ser.read(1).decode)
echo += decoded()

class GPS:
    def __init__(self):
        #Write GPSinput
        out = ''
        ser.write(com.GPSstatus.encode())
        time.sleep(1)

        #Read output
        while ser.inWaiting() > 0:
            decoded = (ser.read(1).decode)
            out += decoded()

        strlen = len(str(out))
        substr = out[0:strlen-9]

        #GPS? information list
        variables = substr.splitlines()

        #Storing each output in a variable
        self.PULSE_SAWTOOTH = [int(s) for s in variables[1] if s.isdigit()]
        self.TRACKED_SATELLITES = [int(s) for s in variables[2] if s.isdigit()]
        self.VISIBLE_SATELLITES = [int(s) for s in variables[3] if s.isdigit()]

        self.LONGITUDE = variables[5]
        self.longlen = len(self.LONGITUDE)
        self.LONGDEG = self.LONGITUDE[0:self.longlen-7]
        self.LONGMIN = self.LONGITUDE[self.longlen-7:]

        self.LATITUDE = variables[6]
        self.latlen = len(self.LATITUDE)
        self.LATDEG = self.LATITUDE[0:self.latlen-7]
        self.LATMIN = self.LATITUDE[self.latlen-7:]

        self.HEIGHT = variables[7]
        self.KNOTS = variables[8]
        self.DEGREES = [9]

        self.GPS_STATUS = variables[10]
        self.TIMING_MODE = variables[17] 
        self.FIRMWARE_VERSION = variables[20]

if __name__ == "__main__":

    #Call the functions
    gps = GPS()
    for i in range(100):
        print(gps.LATITUDE)    
    #Enterable Parameters
    # PULSE_SAWTOOTH
    # TRACKED_SATELLITES 
    # VISIBLE_SATELLITES
    # LONGITUDE
    # longlen
    # LONGDEG
    # LONGMIN
    # LATITUDE
    # latlen
    # LATDEG
    # LATMIN
    # HEIGHT  
    # KNOTS
    # DEGREES 
    # GPS_STATUS 
    # TIMING_MODE 
    # FIRMWARE_VERSION

我猜这是一个非常简单的解决方案,但我是一个初学者,我不完全理解发生了什么,足以修复它。如果有人能提供一些知识并帮助我解决我的问题,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-02-15 12:51:27

除了while循环缩进错误和可能的decode错误之外。您每次都会得到相同的print(gps.LATITUDE)输出,因为您从未更新过它,无论是通过gps对象,还是调用GPS类的成员函数。初始gps对象的LATITUDE值始终等于值variables[6],如果该变量没有改变,那么LATITUDE变量也不会改变。您有多种选择,您可以直接更新LATITUDE

代码语言:javascript
复制
class GPS:
    def __init__(self , latitudeValue = 0):
        self.LATITUDE = latitudeValue

if __name__ == "__main__":
    gps = GPS()
    print(gps.LATITUDE) # Prints 0, default value of latitudeValue
    gps.LATITUDE = 5
    print(gps.LATITUDE) # Now prints 5, changed value of LATITUDE in gps object

或者,您可以将其作为函数调用的一部分:

代码语言:javascript
复制
class GPS:
    def __init__(self , latitudeValue = 0):
        self.LATITUDE = latitudeValue
    def updateLatitude(self , newValue):
        self.LATITUDE = newValue

if __name__ == "__main__":
    gps = GPS()
    print(gps.LATITUDE) # Prints 0
    gps.updateLatitude(10) # Updates LATITUDE VALUE
    print(gps.LATITUDE) # Prints 10

无论variables[6]的值是多少,都可以使用这两种方法中的任何一种。同样,您可以将它与类的所有成员变量一起使用。

对于实时更新,您需要使用事件处理函数,此场景可能需要listener。而不需要更多地了解通过总线传递数据的设备。如果您的设备制造商没有提供可使用的API,那么当您使用循环不断地重新初始化对象时,您可以使用,另一种方法是module reloading

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60235739

复制
相关文章

相似问题

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