进入python的世界_day7_python基础——数据类型的内置方法及操作
写在开头,昨天学习了for循环、range数据,今天学的就比较多,主要是新单词,因为都是英文,必须得知道英文的意思,今天学的每种方法都建议多敲几遍并且每隔三天复习一次
一、数据类型内置方法理论
-
含义
在代码世界中每种数据类型都自带了一些功能,用户在使用的过程中可以通过某些手段调用这种方法,达到省时省力的目的
-
表现形式(如何调用)>>>
python中:句点符
展示出来的效果就是 名字()
比如 append()、isdigit() ......
可以自己在pycharm中在某一个数据类型后加'.',pycharm是后台准备好了该类型可用的内置方法的
二、整形的内置方法
-
类型转换
可以将数字、浮点型(能转但是小数点后的直接舍弃)、字符串(能转但是必须内部都是纯数字不能有其他东西 ps:就算是数字也不能带小数点)转成整形
t = int(11.11)
print(type(t))
print(int(t))
>>>
<class 'int'>
11
————————————————————
t = int('999.1116')
print(type(t))
print(int(t))
>>>
报错
ValueError: invalid literal for int() with base 10: '999.1116'
- int还可以做进制数转换——记住进制的关键单词
print(bin(1000)) >>> 将十进制的100转换成二进制 0b1111101000
print(oct(1000)) >>> 将十进制的100转换成八进制 0o1750
print(hex(1000)) >>> 将十进制的100转换成十六进制 0x3e8
还原: 注意数据值后面跟上几进制的值,让int了解按这个转换,不然他不认识
print(int('0b1111101000', 2))
print(int('0o1750', 8))
print(int('0x3e8', 16))
>>>>1000
ps:如果以后看到0b开头的一串数字,可以判断是二进制的数据,以此类推0o;0x等
三、浮点型的内置方法
-
类型转换
只认识数字,至多一个小数点,如果数据是纯数字没有小数点,会补齐一个小数点
tt = '196'
print(type(tt)) >>> <class 'str'>
tt = float(tt)
print(tt,type(tt)) >>> 196.0 <class 'float'>
tt = '196.77哈哈'
tt = float(tt)
print(type(tt)) >>> 报错
—————————————
yy = '196.168.1'
yy = float(yy)
print(type(yy)) >>> 报错
-
拓展知识:Python中的浮点数运算不准确问题
四、字符串内置方法
- 首先是转换,八大常用数据类型啥都能转字符串
t = {'dsadasd':666, 'sadasd':22, 'sadsadgg':'sadasd'}
t = str(t)
print(t,type(t))
>>>
{'dsadasd': 666, 'sadasd': 22, 'sadsadgg': 'sadasd'} <class 'str'>
-
索引取值
索引位置的标号和列表取元素一样,0为首位,可以取负,意思是从该字符串结尾处拿
tt = 'hello jack'
print(tt[3])
>>> l
print(tt[-1])
>>> k
-
切片取值
表现形式和range很像,顾头不顾尾,也是'头、尾'; '头、尾、步长'的组成形式,也是但是用[ ]来进行索引,用':'来连接,步长还可以用来控制索引方向
tt = 'hello jack'
print(tt[1:3])
>>> el # 顾头不顾尾
print(tt[1:10:2])
>>> el ak
print(tt[-1:-5:-1])
>>> kcaj # 注意这个切片的意思,是值从结尾切到倒数第四位,方向是向左
# 注意,[]内不写一个位置的值,默认是都要
特殊:
print(tt[::2]) # [::2]=[0:10:2]
>>> hlojc
-
统计字符串个数(空格也算哦)
len()
tt = 'hello jack'
print(len(tt))
>>> 10
-
移除字符串首尾指定的字符(注意:只能首尾哦!!!)
strip()
可以用于获取用户输入时不让用户打非相关的数据,可以直接连写在字符串后面
tt = 'hello jack'
print(tt.strip('l'))
>>> hello jack # 没法移除中间的'l'
———————————————————
tt = 'llhello jacklll'
print(tt.strip('l'))
>>> hello jack
昨天猜数字作业补充思考:如果一开始用户输入十八这种非整形数据,会直接报错,那我们怎么做呢?
先补充一个知识 :
isdigit() 方法检测字符串是否只由数字组成
>>> https://www.runoob.com/python/att-string-isdigit.html
count = 0
while True:
if count == 3:
choice = input('是否继续尝试 y/n 请选择:')
if choice == 'y':
count = 0
else:
print('下次再来玩')
break
age = input('请输入年龄>>>:').strip()
if age.isdigit():
age = int(age)
else:
print('不要输入数字以外的内容')
continue
if age > 18:
print('猜大了')
count += 1
elif age < 18:
print('猜小了')
count += 1
else:
print('恭喜猜对')
break
-
切割字符串
split()
按照指定的字符切割字符串,切出来的是一个列表,可以用maxsplit=x 来控制切割的此时,用rsplit 来控制切割的方向
tt = 'song^dance^rap^basketball'
print(tt.split('^'))
>>> ['song', 'dance', 'rap', 'basketball']
___________________
tt = 'song^dance^rap^basketball'
hobby1, hobby2, hobby3, hobb4 = tt.split('^')
-
格式化输出
formart,和占位符差不多,{ } 表示占位有四个用法
-
tt = 'my name is {} my hometown is {}' print(tt.format('tom', 'changsha')) >>> my name is tom my hometown is changsha -
大括号内写索引值可以打破顺序 并且可以反复使用相同位置的数据 tt = 'my name is {0} my hometown is {1} love city is {1} {0}'.format('tom', 'changsha') # format带着的数据看成是元组按索引的定位计数来填充 print(tt) -
大括号内写变量名,见名知意,format后给变量名赋值填充 tt = 'my name is {name} my hometown is {city} love city is {city} {name}' print(tt.format(name='tom', city='changsha')) >>> my name is tom my hometown is changsha love city is changsha tom -
!!!最好用的一种
先定义变量名 在一个需要占位的变量名的数据值前加f,内部占位依旧用{} 填充,就可以直接使用前面出现过的变量名,{}内填充的变量命可以根据自己需要改变 name = 'tom' city = 'changsha' t = f'my name is {name} my hometown is {city}{name}' print(t) >>> my name is tom my hometown is changshatom **很好用!!!!!!!!!
-
-
字符串的拼接
方式1 字符串相加(直接加) print('hello' + 'world') >>> helloworld —————————————————— 方式2 join方法 l = ['name', 'age', 'weight', 'job', 'city'] print('|'.join(l)) >>> name|age|weight|job|city -
大小写————联想到生活中的验证码
.upper() 转大写
.lower() 转小写
isupper() 判断是否都是大写
islower() 判断是否都是小写
t = 'Zhongguo ChangSha' print(t.upper()) >>> ZHONGGUO CHANGSHA __________________ print(t.lower()) >>> zhongguo changsha —————————————————— old_code = 'aaaaA' print('这是返回给用户的图片验证码:%s' % old_code) new_code = input('输入验证码>>>:').strip() if old_code.upper() == new_code.upper(): # 这里也可以使用lower() print('验证码正确') else: print('验证码错误') -
判断字符串中是否是纯数字
.isdigit()
tt = '6565' print(tt.isdigit()) >>> True ______________ tt = 'HAHA' print(tt.isdigit()) >>> False -
替换字符串中指定的字符
.relpace(),()中填写需要替代的数据值,默认全替换,可以通过加数字来控制替换的次数
tt = 'my hobby is music football playgame music playgame' print(tt.replace('music', 'dance')) >>> my hobby is dance football playgame dance playgame __________________________ tt = 'my hobby is music football playgame music playgame' print(tt.replace('music', 'dance', 1)) >>> my hobby is dance football playgame music playgame -
统计指定字符出现的次数
.count() ()内定义需要统计的数据值 ```py tt = 'my hobby is music football playgame music playgame' print(tt.count('o')) >>> 3 ``` -
判断字符串的开头或者结尾
.startwith()
.endwith()
!!注意,字符串内数据的每一个数据值都可以进判断
-
找数据值
.find() 查看指定字符对应的起始索引值 从左往右找到一个就结束
.index() 找不到直接报错 substring not found
tt = 'my hobby is music football playgame music playgame' print(tt.find('s')) 找到's'就报告他的索引位置 print(tt.find('w')) 找不到'w'就反馈-1 print(tt.index('is')) 找到'is'就反馈找到的一瞬间的索引位置 print(tt.count('music')) 计数 >>> 10 -1 9 2
五、列表内置方法
-
类型转换
.list() 能够被for循环的数据值都可以被转换成列表,所以可以是字符串、列表、字典、元组、集合(注意,字典依旧是K暴露在外面,默认拿不到V)
-
切片
[ ] 规则和字符串一致
-
统计计数 ////////////////////代码有点没搞懂,稍后再细看,懂了懂了
len( )
l1 = [111, 222, 333, 444, 555, 666, 777, 888, 999, 222, 777, 666, 1111] print(len(l1)) >>> 13 -
统计列表中指定数据出现的次数
.count()
-
列表内数据值修改
直接按索引改
tt = [111, 222, 333, 444, 555, 666, 77, 888] tt[1] = '嘿嘿' print(tt) >>> [111, '嘿嘿', 333, 444, 555, 666, 77, 888] -
添加数据值
-
尾部添加
.append.() 注意:括号内不管多少个数据值,都会被当成一个整体添加到表格尾部
-
任意位置索引添加
.insert() ()先添加位置标记数,然后写数据值
-
拓展列表 合并相加
l1 + l2
.extend
-
-
删除列表数据
-
del删除
.del[] 一样是索引
-
remove移除 注意:拿走就真的消失了
.remove()
-
pop 暂时拿出(弹出) 注意:暂时拿出来,如果以后用一次就消失
.pop() 默认是弹出尾部的数据值
name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] print(name_list.remove(2)) t = name_list.remove(2) >>> 报错 —————————————— name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] print(name_list.pop(2)) t = name_list.pop(2) >>> tony _______________ name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] print(name_list.pop(2)) t = name_list.pop(2) m = name_list.pop(2) print(t) print(m) >>> tony jack [666, 777, 888, 999]
-
-
排序、颠倒顺序
.sort()默认升序
如果要改成降序,()内填写reverse=True即可
.reverse() 倒序
六、可变与不可变
-
可变的:列表、集合、字典(可以进行更改,并且更改后物理地址不会发生改变)
-
不可变的:数字、字符串、元组(不可以进行更改,更改后就是一个新的对象了,物理地址发生了变化)
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
a[1] ='嘿嘿'
print(a)
print(id(a))
print(a == b)
>>>
2144298344832
2144298343808
[1, '嘿嘿', 3]
2144298344832
False
# 发现没有,a与b虽然数据值一样,但是地址不相同,而改变了后的a,虽然值大不相同,但是地址依旧没改变
七、作业
1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
data_source = 'jason|123' # 一个用户数据
t = data_source.split('|')
name_real = t[0]
password_real = t[1]
while True:
name = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>:').strip()
if name == name_real and password == password_real:
print('登录成功')
break
else:
print('请检查后重新输入')
2.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>:').strip()
for i in data_source:
t = i.split('|')
# 比如 t = 'jason|123'.strip('|')
# print(t, type(t)) # jason|123 <class 'str'> 拿到的是字符串,可以索引取值,取值后绑定给新的变量名
username_real = t[0]
password_real = t[1]
if username == username_real and password == password_real:
print('登录成功')
break
else:
print('请检查用户名或者密码')
3.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
name_list = []
while True:
print("""
-------用户名系统(完善中)------
1.添加用户
2.查看用户
3.删除用户
q.退出系统
---------------------
""")
choice_num = input('请输入您要执行的功能编号>>>:').strip()
if choice_num == '1':
username = input('已进入添加用户页面,请输入用户名>>>:').strip()
if username in name_list:
print('该用户名已存在,请重新输入')
else:
name_list.append(username)
print(f'用户{username}添加成功') # 给一个反馈 用format占位法
elif choice_num == '2':
for i in name_list:
print(f"""
-------userinfo------
用户名:{i}
---------------------
""")
elif choice_num == '3':
delete_username = input('已进入删除用户页面,请出入您想删除的用户名>>>:').strip()
if delete_username in name_list:
name_list.remove(delete_username)
print(f'用户名{delete_username}已经删除')
else:
print('戳啦,找不到这个用户名')
elif choice_num == 'q':
print('系统已退出,感谢使用')
break
else:
print('功能完善中')

浙公网安备 33010602011771号