无法正确格式化字符串
unable to correctly format string
(raspbian,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 值 (stval) 小于 10 时,我都会插入一个“0”。因此,ST 后跟三个数字。
关于如何使用 HT 进行相同的三位数字格式化,我无法形成逻辑(而且我是 python 的新手)? HT是进度条上的一个数值(整数),不能超过100%,而ST是室温,几乎不会超过50%(可以是小数)。
非常感谢您在这方面帮助我。
您可以通过基本的字符串格式化来做到这一点。
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)
将值补零。
(raspbian,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 值 (stval) 小于 10 时,我都会插入一个“0”。因此,ST 后跟三个数字。
关于如何使用 HT 进行相同的三位数字格式化,我无法形成逻辑(而且我是 python 的新手)? HT是进度条上的一个数值(整数),不能超过100%,而ST是室温,几乎不会超过50%(可以是小数)。
非常感谢您在这方面帮助我。
您可以通过基本的字符串格式化来做到这一点。
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)
将值补零。