Python循环实现条码扫描回退功能的问题求助
条码扫描回退功能实现问题
我们批量扫描设备条码时,常因条码间距过近导致误扫。现有Python循环代码仅支持输入条码和按q结束,无回退功能,误扫后只能重启脚本或手动修改Access数据库。
尝试用.pop()实现按e删除最后一条记录的回退功能,但输入的e被误加入序列号列表,相关代码及输出如下:
初始代码
# get serial numbers for equipment print("------------------------") serial_numbers = [] print("Scan barcode, type 'q' when you are done.") # loop for user to insert multiple serial numbers. while True: s = input("Scan Code: ") if s == "q": break serial_numbers.append(s) print("Here is the list of serial numbers:") print(serial_numbers)
修改后的错误代码
# get serial numbers for equipment print("------------------------") serial_numbers = [] print("Scan barcode, Type 'e' to delete last scanned item. Type 'q' when you are done.") # loop for user to insert multiple serial numbers. while True: s = input("Scan Code: ") if s == "e": serial_numbers.pop() print(serial_numbers) if s == "q": break serial_numbers.append(s)
错误输出
Scan barcode, Type 'e' to delete last scanned item. Type 'q' when you are done. Scan Code: 31P11JJ0019US Scan Code: 31P11JJ0019US Scan Code: 31P11JJ0019US Scan Code: 31P11JJ0019US Scan Code: e ['31P11JJ0019US', '31P11JJ0019US', '31P11JJ0019US'] Scan Code: 31P11JJ0019US Scan Code: e ['31P11JJ0019US', '31P11JJ0019US', '31P11JJ0019US', 'e'] Scan Code:
正确实现方案
问题根源
错误在于输入e时,执行完删除操作后没有跳过后续的添加语句,导致e被加入列表。另外未考虑列表为空时执行pop()会报错的情况。
修正后的代码
# 获取设备序列号 print("------------------------") serial_numbers = [] print("扫描条码,按'e'删除最后一条记录,按'q'结束输入。") # 循环接收多个序列号输入 while True: s = input("扫描条码: ") if s == "q": break elif s == "e": if serial_numbers: # 仅当列表非空时执行删除 serial_numbers.pop() print(f"当前序列号列表: {serial_numbers}") else: print("列表为空,没有记录可删除!") else: # 非指令字符,添加到列表 serial_numbers.append(s) print("最终序列号列表:") print(serial_numbers)
关键改进点
- 用
elif和else分支区分指令和条码输入,确保e不会被添加到列表 - 增加列表非空判断,避免空列表执行
pop()引发异常 - 优化提示信息为中文,适配使用场景
内容的提问来源于stack exchange,提问作者TylerTheD3V
相关产品推荐
相关产品推荐

