#
本帖最后由 柳向城 于 2021-1-28 11:32 编辑# 乘十取整除十
firstDot = self.sender().text().find('.')
if(firstDot!= -1):
self.lcdString = self.sender().text()[:firstDot+1] + self.sender().text().replace('.', '')
else:
self.lcdString = self.sender().text()
本帖最后由 Hieda 于 2018-12-31 19:29 编辑
你这段代码的目的可以理解为预读下一个字符,如果是“.”则确认之前是否出现过一次“.”,如果已经有就无视这个字符,否则append到字符串末端
所以我建议你你增加一个布尔值field(或者变量)来存储是否已经出现过“.”,这样一个是效率更快(每次读取字符是O(1)而不是O(n)),一个是核心逻辑只会出现一次:
if self.sender().text() == r"." and self._has_occurred: #小数点输入超过一个忽略处理
pass
else:
self.lcdString = self.lcdString + self.sender().text()# 获得按键字符,按键字符并累计添加
if self.render().text == r".":
self._has_occurred = True
Hieda 发表于 2018-12-31 19:26
你这段代码的目的可以理解为预读下一个字符,如果是“.”则确认之前是否出现过一次“.”,如果已经有就无视这 ...
这个办法好 本帖最后由 柳向城 于 2021-1-28 11:38 编辑
# 输入完再截断不行吗 柳向城 发表于 2018-12-31 22:41
是取小数点及前面一串字符不变,小数字后面字符再有小数字就用空代替吗?
这个方法我想过,但是没有找 ...
我一开始没细看,是输入时处理?
我这个是输入后处理……把第一个点后面的点全清掉 EraserKing 发表于 2018-12-31 22:44
我一开始没细看,是输入时处理?
我这个是输入后处理……把第一个点后面的点全清掉 ...
是输入后处理 本帖最后由 柳向城 于 2021-1-28 11:37 编辑
# 柳向城 发表于 2018-12-31 22:45
是输入后处理
那你试试吧,我没试过,脑补的代码 本帖最后由 柳向城 于 2021-1-28 11:37 编辑
# (\d+\.\d+)
—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play 你的全家 发表于 2019-1-1 05:55
(\d+\.\d+)
—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play
我觉得(\d+(\.\d+)?)应该会更好一点
—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1.2 RAMDA 发表于 2019-1-1 18:07
我觉得(\d+(\.\d+)?)应该会更好一点
—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2. ...
用这个正则表达式查找后,通过结果判断是否pass?还是替换? 柳向城 发表于 2019-1-1 18:51
用这个正则表达式查找后,通过结果判断是否pass?还是替换?
去拿最外层括号捕获到的分组应该就可以了
—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1.2 RAMDA 发表于 2019-1-1 21:11
去拿最外层括号捕获到的分组应该就可以了
—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1. ...
match group 1
—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play 数字输入也是用的按钮吧,那'.'这个按钮加个标志就行了,按过一次就不再生效。
页:
[1]