python3 数据类型归纳

1、简介

1.1、python3 数据类型:

类型含义示例
int整型1
float浮点型1.0
bool布尔值True或False
complex复数a+bj
string字符串‘abc123’
list列表[a,b,c]
tuple元组(a,b,c)
set集合{a,b,c}
dictionary字典{a:b,c:d}

1.2、备注说明

类型说明
complex复数的虚数部分不能省略
string字符串不能包括有 ‘\’ ,否则输出的不是原来的字符串
list和tuplelist可以修改元素,tuple不能,但是tuple可以包括list等多种数据类型,占用资源多于list
set没有排列的顺序及不会有重复的元素
dictionary一个键对应多个值,但是不能有相同的键

2、示例

2.1、int

A=1
print('A的类型为:',type(A))
>>>A的类型为: <class 'int'>

2.2、float

B=1.0
print('B的类型为:',type(B))
>>>B的类型为: <class 'float'>

2.3、bool

C=True
print('C的类型为:',type(C))
>>>C的类型为: <class 'bool'>

2.4、complex

D=1+1j
print('D的类型为:',type(D))
>>>D的类型为: <class 'complex'>

2.5、string

E='abc123'
F='\abc123'
print('E的类型为:',type(E))
print('E输出为:',E,'\nF输出为:',F)
>>>E的类型为: <class 'str'>
F的类型为: <class 'str'>
E输出为: abc123 
F输出为: bc123

2.5、list

G=[A,B,C,D,E]
print('G的类型为:',type(G))
print('列表G在元素更改前为:',G)
print('列表G的第一个元素为:',G[0])
G[0]=100
print('列表G在元素更改后为:',G)
>>>G的类型为: <class 'list'>
列表G在元素更改前为: [1, 1.0, True, (1+1j), 'abc123']
列表G的第一个元素为: 1
列表G在元素更改后为:[100, 1.0, True, (1+1j), 'abc123']

2.6、tuple

H=(A,B,C,D,E,F,G)
print('元组H为:',H)
print('H的类型为:',type(H))
>>>元组H为: (1, 1.0, True, (1+1j), 'abc123', '\x07bc123', [100, 1.0, True, (1+1j), 'abc123'])
H的类型为: <class 'tuple'>

2.7、set

I={A,B,C,D,E,F,G}
J=set('string')
print('集合I为:',I)
print('集合J为:',J)
print('I的类型为:',type(I))
print('J的类型为:',type(J))
>>>集合I为: {1, (1+1j), '\x07bc123', 'abc123'}
集合J为: {'s', 'i', 'g', 'r', 't', 'n'}
I的类型为: <class 'set'>
J的类型为: <class 'set'>

2.8、dictionary

K={1:'one',2:'two',3:'three'}
print('K输出为:',K)
print('K的类型为:'type(K))
K[4]='four'
print('新的字典K为:',K)
>>>K输出为: {1: 'one', 2: 'two', 3: 'three'}
K的类型为: <class 'dict'>
新的字典K为: {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

3、数据简单操作

3.1、int、float、string之间的转换

A=1
B=1.25
C='1.25'
D_1=int(B)
D_2=float(A)
D_3=float(C)
D_4=str(A)
D_5=str(B)
print('B转换成为int型:',D_1)
print('A转换成为float型:',D_2)
print('C转换成为float型:',D_3)
print('A转换成为string型:',D_4)
print('B转换成为string型:',D_5)
>>>B转换成为int型: 1
A转换成为float型: 1.0
C转换成为float型: 1.25
A转换成为string型: 1
B转换成为string型: 1.25

3.2、string操作

3.2.1、字符串编辑
X='abc'
Y='123'
Z=X+Y
print('X和Y相加得到Z为:',Z)
>>>X和Y相加得到Z为: abc123

3.2.2、encode、decode

使用encode和decode在串口编程的时候对用户界面输入量进行编码处理:

import binascii
A='string'
B=A.encode(encoding='utf_8', errors='strict')
C=binascii.b2a_hex(B)
D=C.decode()
print('A编码为B后为:',B)
print('B的类型为:',type(B))
print('将B转换成16进制ascii值:',C)
print('对C进行解码得D:',D)
>>>A编码为B后为: b'string'
B的类型为: <class 'bytes'>
将B转换成16进制ascii值: b'737472696e67'
对C进行解码得D: 737472696e67

得到得D可以作为16进制数直接发送至串口。

3.2.3、string与list
E='abcd'
F=list(E)
print('字符串E拆分成列表F为:',F)
F.remove('a')
print("列表F删除字符'a'后为:,",F)
L=[]
L.append(E)
print('字符串E加入L列表之后为:',L)
M=''.join(F)
print('列表F转换成字符串M为:',M)
>>>字符串E拆分成列表F为: ['a', 'b', 'c', 'd']
列表F删除字符'a'后为:, ['b', 'c', 'd']
字符串E加入L列表之后为: ['abcd']
列表F转换成字符串M为: bcd

3.2.4、string与dictionary
G='abcd'
H={'a':'1','b':'2','c':'3','d':'4'}
I=str.maketrans(H)
J=G.translate(I)
print('字符串G替换元素成为字符串J:',J)
>>>字符串G替换元素成为字符串J: 1234

4、应用-串口编程的数据前处理

4.1概述

根据项目需求,用户输入站号、功能码、位数、数据,通过CRC16=MODBUS通信协议计算校验码,之后将所有数据整合到一起通过串口以16进制数发送。用户输入阶段获取的数据类型为字符串,计算返回的校验码也是通过字符串的格式得到。

4.2程序设计

主程序:
import binascii
import re
from CRC_MODBUS import result_crc
address_num='01'#站号
func_num='03'#功能码
bit_num='05'#位数
data='12345'#数据
data_to_ascii=binascii.b2a_hex(data.encode(encoding='utf_8', errors='strict'))
sum_data_string=address_num+func_num+bit_num+data_to_ascii.decode()
sum_data_hex=bytes.fromhex(sum_data_string)
crc_string=result_crc(sum_data_hex).result()
#得到的crc_string为'0xFFFF'类型的字符串,校验码需要的是'FFFF'这一部分。
crc_del=re.sub('0x','',crc_string)
#校验码计算结果可能只是'0xFF',所以要将数据补充至标准的4位。
crc_fill_zero=crc_del.rjust(4,'0')
#-------------------------------------------------------------------
#以下为通信协议要求,对CRC校验码进行前两位与后两位交换。
crc_division=[crc_fill_zero[i:i+2] for i in range(0,4,2)]
crc_finally=crc_division[0]
crc_division.remove(crc_division[0])
crc_division.append(crc_finally)
crc_exchange_string=''.join(crc_division)
#-------------------------------------------------------------------
serial_data=sum_data_string+crc_exchange_string
serial_sent_data=serial_data.encode()
print('串口要发送的数据为:',serial_sent_data)
print('串口发送的数据类型为:',type(serial_sent_data))
>>>串口要发送的数据为: b'0103056667613030e024'
串口发送的数据类型为: <class 'bytes'>


CRC_MODBUS.py

采用查表法,效率较高,程序借鉴此网站,加入自己的类以便于引用。

INITIAL_MODBUS = 0xFFFF
table = (
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 )
def calcByte( ch, crc):
    if type(ch) == type("c"):
        by = ord( ch)
    else:
        by = ch
    crc = (crc >> 8) ^ table[(crc ^ by) & 0xFF]
    return (crc & 0xFFFF)
class result_crc():
    def __init__(self, st):
        self.st=st
    def result(self):
        crc=INITIAL_MODBUS
        for ch in self.st:
            crc=calcByte(ch, crc)
        return (hex(crc))

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值