基本类型及其内置方法(上)

8-2

**程序 = 数据(变量+文件)+功能(与用户交互+运算符=+流程控制)**

可变与不可变类型

# 如果值改变,但是内存地址不变,证明就是在改变原值,即原值可变
# 如果值改变,但是内存地址也变了,证明不是在改变原值,而是产生了新的值,即原值不可变

# x = 10
# print(id(x))
# x = 11
# print(id(x))

# l = [111, 222, 333]
# print(id(l))
# l[0] = 666
# print(id(l))

数据类型

**int**
# ======================================int基本使用=====================================
# 1、用途

# 2、定义方式
age = 18  本质# age = int(18)
# print(type(age))

# int数据类型转换
# res = int("    18    ")
# print(res,type(res))

# 3、常用操作+内置的方法
# 算数运算+比较运算

# ======================================该类型总结=============================
# 存一个值
# 不可变
**float**
# ======================================float基本使用===================================
# 1、用途

# 2、定义方式
salary = 3.33  # salary = float(3.33)

# float数据类型转换
# res = float("    1.8    ")
# print(res,type(res))

# 3、常用操作+内置的方法
# 算数运算+比较运算

# ======================================该类型总结====================================
# 存一个值
# 不可变
# **注意**:名字+括号的意思就是调用某个功能,
比如# print(...)调用打印功能
# int(...)调用创建整型数据的功能
# float(...)调用创建浮点型数据的功能
# **注意**:名字+括号的意思就是调用某个功能,
比如# print(...)调用打印功能
# int(...)调用创建整型数据的功能
# float(...)调用创建浮点型数据的功能

# 1、数据类型转换
# 1.1 int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号,则会报错
>>> s = '123'
>>> res = int(s)
>>> res,type(res)
(123, <class 'int'>)

【>>> int('12.3') # **错误演示**:字符串内包含了非整数符号.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.3'】

# 1.2 进制转换
# 十进制转其他进制
>>> bin(3)
'0b11'
>>> oct(9)
'0o11'
>>> hex(17)
'0x11'
# 其他进制转十进制
>>> int('0b11',2)
3
>>> int('0o11',8)
9
>>> int('0x11',16)
17

# 1.3 float同样可以用来做数据类型的转换
>>> s = '12.3'
>>> res=float(s)
>>> res,type(res)
(12.3, <class 'float'>)
**str**
# ======================================str基本使用=====================================
# 1、用途

# 2、定义方式
# 定义:在单引号\双引号\三引号内包含一串字符   (三引号用于引用多行字符)(外双内单)
name1 = 'jason'  # 本质:name = str('任意形式内容')
name = "egon"  # name = str("egon")

# **str数据类型转换:可以把任意类型都转换成字符串类型**

# res = str([1,2,3])
# print(res,type(res))  # "[1,2,3]"

# 3、常用操作+内置的方法
# 3.1 优先掌握的操作:
# (1)、按索引取值(正向取+反向取) :只能取

#      0123
# msg = 'hello world'
# print(msg[4])
# print(msg[5])

# (2)、切片(顾头不顾尾,步长):从一个大字符串中拷贝出一个子字符串
# msg = 'hello world'
#
# # res = msg[1:5:2]  # 1 3
# # res = msg[1:5]  # 1234
# # res = msg[1:]  #
# # res = msg[:]  #
# # res = msg[-1:-4:-1]  # -1 -2 -3
# # res = msg[-1::-1]  # -1 -2 -3
# res = msg[::-1]  # 将字符串颠倒
#
# print(res)
# print(msg)

# (3)、长度len(获取字符串长度,即字符个数,但凡存在于引号内(包括空格)的都算作字符
# msg = 'hello world'
# print(len(msg))

# (4)、成员运算in和not in
msg = 'hello world'
# print('el' in msg)
# print('el' not in msg)  # 推荐
# print(not 'el' in msg)

# (5)、移除空白strip
#  strip移除字符串首尾指定的字符,strip(self,chars)所提取的字符数
#  括号内不指定字符,默认移除首尾空白字符(空格、\n、\t)
# name = '       eg on       '
# print(name.strip())

# name = '*****eg on****'
# print(name.strip('*').replace(" ",''))

# msg = "*(&%&%&_+)**&^e*gon*)(^%$$&$"
# print(msg.strip('*()&%_+^%$'))

# x = 'a c d e'
# print(x.replace(' ','',1))
# print(x.replace(' ',''))

# 案例:
# inp_user = input("username>>>: ").strip()  # inp_user = "      egon"
# inp_pwd = input("password>>>: ").strip()
# if inp_user == "egon" and inp_pwd == '123':
#     print('ok')
# else:
#     print('no')

# (6)、切分split:把一个字符串按照某种分割符切分一个列表 
#split(self,chars)所提取的字符数
# msg = "egon:18:male:10"
# res = msg.split(':')
# print(res)
# print(res[0])

# res = msg.split(':',1)
# print(res)

# 6.1 把列表中的元素按照某种分隔符拼接成字符串
# info = ['egon', '18', 'male', '10']
#
# msg = ":".join(info)
# print(msg)

# (7)、循环
# msg = "hello world"
# for i in msg:
#     print(i)

# 需要掌握的操作(****)
# 1、strip,lstrip,rstrip
# print("******egon*****".strip('*'))
# print("******egon*****".lstrip('*'))
# print("******egon*****".rstrip('*'))

# 2、lower,upper
# print("AbC".lower())
# print("AbC".upper())

# 3、startswith,endswith
# print('hello world'.startswith('he'))
# print('hello world'.endswith('d'))

# print('hello world'.startswith('h'))
# print('hello world'.startswith('e',1,4))

# 4、format的三种玩法
# print("my name is %s my age is %s" % ('egon', 18))
# print("my name is {name} my age is {age}".format(age=18,name='egon'))

# print("my name is {} my age is {}".format(18,'egon'))

# print("my name is {1} my age is {0}{0}{0}".format(18,'egon'))

# x = 'egon'
# y = 18
# print(f'my name is {x} ,my age is {y}')

# 5、split,rsplit
# msg = 'egon:18:male'
# print(msg.split(':',1))
# print(msg.rsplit(':',1))

# 6、replace     # 7、isdigit(方法检测字符串是否只由数字组成)

# print("18".isdigit())

# age = input('>>>: ').replace(' ', '')
# if age.isdigit():
#     age = int(age)
#     if age > 18:
#         print('too big')
#     elif age < 18:
#         print('too small')
#     else:
#         print('you got it')
# else:
#     print("必须输入数字,小垃圾")

# **----------------------需要的了解的操作(***)----------------------------**

#1、find,rfind,index,rindex,count

find:从指定范围内查找子字符串的起始索引,找得到则返回索引对应的数字,找不到则返回-1
index:同find,但在找不到时会报错

msg = 'hello egon ahahah egon xxx egon'
# print(msg.find('egon1'))
# print(msg.index('egon1'))
# print(msg.rfind('egon'))

#2、center,ljust,rjust,zfill

居中,左对齐,右对齐,(字符串右对齐显示,不够用0填充)

# print('egon'.center(50,'*'))总宽度为50,字符串居中,不够用*填充
# print('egon'.ljust(50,'*'))
# print('egon'.rjust(50,'*'))

# print('egon'.rjust(50,'0'))
# print('egon'.zfill(50))

#4、captalize,swapcase,title

首字母大写,大小写翻转,每个单词的首字母大写

# print('abcd'.capitalize())
# print('AbCd'.swapcase())
# print('my name is egon'.title())

#5、is数字系列
# print('18'.isdigit())
# print('Ⅳ'.isnumeric())

#isdecimal:uncicode(bytes类型无isdecimal方法)
#isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
#总结:
    最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    如果要判断中文数字或罗马数字,则需要用到isnumeric。

#6、is其他
>>> name = 'tony123'
>>> name.isalnum() #字符串中既可以包含数字也可以包含字母
True
>>> name.isalpha() #字符串中只包含字母
False
>>> name.isidentifier()
如果字符串是有效标识符,则 isidentifier() 方法返回 True,否则返回 False。
如果字符串仅包含字母数字字母(a-z)或(0-9)或下划线(_),则该字符串被视为有效标识符。
有效的标识符不能以数字开头或包含任何空格。
True
>>> name.islower()  # 字符串是否是纯小写
True
>>> name.isupper()  # 字符串是否是纯大写
False
>>> name.isspace()  # 字符串是否全是空格
False
>>> name.istitle()  # 字符串中的单词首字母是否都是大写
False

# ======================================该类型总结====================================
# 存一个值
# 有序
# 不可变
**list**
# ======================================list基本使用===================================
# 1、用途

# 2、定义方式:在[]用逗号分隔开多个任意类型的元素
# l = [111,33.333,"aaaa",[666,7777]]  # l = list(...)
# print(type(l))

# list数据类型转换
# res = list("hello")
# print(res)

# 3、常用操作+内置的方法
# list无find方法
# 3.1 优先掌握的操作:
# 1、按索引存取值(正向存取+反向存取):即可存也可以取
# l = [111,222,333,444,555,666,777]
# print(l[0])
# print(l[-1])
# print(id(l))
# l[0] = 999
# print(id(l))

# l[7] = 888  # 如果索引不存在则报错

# 2、切片(顾头不顾尾,步长)
# l = [111,222,333,444,555,666,777]
# print(l[1:4:1])  # 拷贝

# print(l[:])
# print(l[::-1])

# 3、长度
# l = [111,222,333,444,555,666,777]
# print(len(l))

# 4、成员运算in和not in
# l = [111,222,333,444,555,666,777]
# print(333 in l)

# 5、追加、插入
# append()列表尾部追加元素
# l = [111,222,333,444,555,666,777]
# l.append(888)

# insert()在指定位置插入元素
# l.insert(3,999999999999)
# print(l)

# 6、删除
l = [111, 222, 333, 444, 555, 666, 777]
# (1)万能删除
# del l[1]
# print(l)

# (2) l.remove()
# 括号内指名道姓表示要删除哪个元素,没有返回值
# v = l.remove(333)
# print(l)
# print(v)

# (3) l.pop() 
# 默认删除列表最后一个元素,有返回值,括号内可以通过加索引值来指定删除元素
# v = l.pop(2)
# print(l)
# print(v)

# 7、循环
# l = [111,222,333,444,555,666,777]
# for i in l:
#     print(i)

# 3.2 需要掌握
# l = [111,222,333,444,333,555,666,777]
# print(l.index(333))
# print(l.index(9999))

# print(l.count(333))

# l = [111,'a',333,'dddd']
# reserve 颠倒列表内元素顺序
# l.reverse()
# print(l)

# l = [111,'a',333,'dddd']
# l = [111, -3, 99, 27]
# 给列表内所有元素排序,排序时列表元素之间必须是相同数据类型,不可混搭,否则报错
# l.sort(reverse=True)
# print(l)

# l = [111, -3, 99, 27]
# nums = [333,444,555]
# 列表尾部追加元素
# # l.append(nums)

# extend 
# 用于在列表末尾一次性追加另一个序列中的多个元素(用新列表扩展原来的列表)
# l.extend(nums)
# print(l)

# new_l = l.copy()
# new_l = l[:]

# ======================================该类型总结===================================
# 存多个
# 有序
# 可变
**tuple**
# ======================================元组基本使用======================================
# 1、用途:元组就是一种不可变的列表

# 2、定义方式:在()内用逗号分割开多个任意类型的元素
# t = (11,11.333,"aaa",[666,777])  # t = tuple()
# print(type(t))
#
# t[0] = 999

# t = (1111,)
# print(type(t))

# tuple数据类型转换
# print(tuple("hello"))

# 3、常用操作+内置的方法
# 优先掌握的操作:
# 1、按索引取值(正向取+反向取):只能取
# 2、切片(顾头不顾尾,步长)
# 3、长度
# 4、成员运算in和not in

# 需要了解的
# t = (111,222,222,222,333)
# print(t.count(222))
# print(t.index(222))

# ======================================该类型总结====================================
# 存多个值
# 有序
# 不可变

t = (11, 22, [33, 44])
t[2][0] = 66
**队列是,先存入的数据最先取出,即“先进先出”。
栈是,最后存入的数据最先取出,即“后进先出”。**

**Python list实现队列**

使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 
insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,
使用 pop() 方法,即将队列的最后一个元素弹出。
如此 list 列表中数据的存取顺序就符合“先进先出”的特点。实现代码如下:

1.  #定义一个空列表,当做队列
2.  queue = []
3.  #向列表中插入元素
4.  queue.insert(0,1)
5.  queue.insert(0,2)
6.  queue.insert(0,"hello")
7.  print(queue)
8.  print("取一个元素:",queue.pop())
9.  print("取一个元素:",queue.pop())
10.  print("取一个元素:",queue.pop())

['hello', 2, 1]
取一个元素: 1
取一个元素: 2
取一个元素: hello

**Python list实现栈**

使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。
append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的insert()方法正好相反。

1.  #定义一个空 list 当做栈
2.  stack = []
3.  stack.append(1)
4.  stack.append(2)
5.  stack.append("hello")
6.  print(stack)
7.  print("取一个元素:",stack.pop())
8.  print("取一个元素:",stack.pop())
9.  print("取一个元素:",stack.pop())

[1, 2, 'hello']
取一个元素: hello
取一个元素: 2
取一个元素: 1
posted @ 2021-08-02 14:52  停在夏季  阅读(28)  评论(0)    收藏  举报
-->