无法正确格式化字符串

2024-05-29 03:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

(拉斯宾,rp3)

我可以将一个字符串从PC控制台发送到我的GUI(tkinter)。举个例子:

$SK039AR878HT010;

(出于测试目的,我从控制台手动发送此命令,但将来我的控制台将被一台机器取代)

此命令基本上指示:SK=3.9,AR=87.8,HT=10%(进度条)。这些值进入GUI并在GUI上相应地设置。你知道吗

同时,GUI也不断地向控制台发送一个类似的字符串(响应我发送的内容:$SK039AR878HT010;)

$ST039HT10;

(ST在GUI上手动设置)

现在的问题是通信协议说,每个变量后面应该有三个数字。但是可以看出,对于HT,后面是两个数字,即10。正确的格式是

$ST039HT010;

为了实现ST的相同功能(如您所见,039有一个三位数,代表3.9),我做了以下操作:

            if self.App.stval<10:

               self.App.port.write(serial.to_bytes(str.encode('$'+ 'ST'+'0' + str(int(self.App.stval*10))+'HT'+ str(int(self.App.mpb["value"]))+';' )) )
            else:
                self.App.port.write(serial.to_bytes(str.encode('$'+ 'ST' + str(int(self.App.stval*10))+'HT'+str(int(self.App.mpb["value"]))+';' )) )

这里stval是ST的值(设置温度,从GUI完成),在上述情况下为3.9摄氏度。你知道吗

也就是说,每当ST value(stval)小于10时,就插入一个“0”。因此,ST后面跟着三位数字。你知道吗

我无法开发一个逻辑(也是因为我对python不太熟悉),如何使用HT执行相同的三位数格式?HT是进度条上的值(整数),不能超过100%,而ST是室温,几乎不会超过50%(可以是小数)。你知道吗

我将非常感谢你在这方面对我的帮助。你知道吗


Tags: 字符串进度条命令selfappvaluegui数字
1条回答
网友
1楼 · 发布于 2024-05-29 03:01:27

您可以通过基本的字符串格式来实现这一点。你知道吗

stval = '$ST39HT10'
st_values = stval.split('ST')[1].split('HT')
st_values = ['0' + value if len(value)<3 else value for value in st_values ]
new_stval = '$ST'+ st_values[0] + 'HT' + st_values[1]
print(new_stval)

输出

$ST039HT010

如果stval不是字符串,请使用str(htval).zfill(3)将零填充到该值。你知道吗

相关问题 更多 >

    热门问题