python基础:数据类型内置方法理论、整型内置方法与操作、浮点型内置方法与操作、字符串内置方法与操作、列表内置方法及操作、可变类型与不可变类型
目录
作业讲解
1.计算1-100所有的数之和
all_num = 0
for i in range(1, 101):
all_num += i
print(all_num)
2.判断列表中数字2出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
# 1.先定义一个记录数字2出现次数的计数器
count_num = 0
# 2.循环获取列表中每一个数据值判断是不是数字2
for i in l1:
# 3.如果i绑定的数据值是2 则让计数器自增1
if i == 2:
count_num += 1
# 4.等待for循环运行结束 打印计数器
print(count_num)
3.编写代码自动生成所有页网址(注意总共多少页)
https://movie.douban.com/top250?start=0&filter=
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
base_url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0, 250, 25):
print(base_url % i)
4.编写代码打印出下列图形(ps:for循环嵌套)
*****
*****
*****
*****
for i in range(4): # 0 1 2 3 4次 4行
for j in range(5): # 0 1 2 3 4 5次 5列
print('*', end='')
print() # 内存循环结束 换行
'''
补充debug调试模式(程序员后期找bug必备工具)
'''
一:数据类型内置方法理论
- 简介:内置方法可以简单的理解成是每个数据类型自带的功能(每个人不同的特长)
- 使用数据类型的内置方法同意采用句点符:数据类型.方法名()
eg:
1.'jason'.字符串内置方法
2.绑定字符串的变量名.字符串内置方法
3.也可以使用关键字:
eg:
str.字符串内置方法
注意:数据类型的内置方法比较的多 主要是熟能生巧
二:整型内置方法与操作
- 1.概念:整型就是整数,主要用于计算,没有内置方法
- 2.关键字:int
类型转换(将其他数据类型转换成整型)
- 3.类型转换(将其他数据类型转换成整型)
int(其他数据类型)
注意:浮点型可以直接转 字符串必须满足内部是纯数字才可以
进制数转换
- 4.进制数转换
- 进制:二进制、八进制、十进制、十六进制
- 十进制转其他进制:
bin():将十进制转二进制 0b1100100 0b是二进制数的标识
oct():将十进制转八进制 0o144 0o是八进制数的标识
hex():将十进制转十六进制 0x64 0x是十六进制数的标识
print(bin(100)) # 将十进制转换为二进制 # 0b1100100
print(oct(100)) # 将十进制转换为八进制 # 0o144
print(hex(100)) # 将十进制转换为十六进制 # 0x64
- 5.其他进制转十进制
- 自动识别进制数
- 人为指定进制数
自动识别
print(int(0b1100100)) # 100
print(int(0o144)) # 100
print(int(0x64)) # 100
人为指定
print(int("0b1100100", 2)) # 100
print(int("0o144", 8)) # 100
print(int("0x64", 16)) # 100
注意:python自身对数字的敏感度较低(精确度低)如果需要精准的计算需要借助于模块numpy....
三:浮点型内置方法与操作
类型转换
res = float(11) # 11.0
res = float('11') # 11.0
res = float('11.11') # 11.11
res = float('1.1.1.1.1') # 不行
res = float('abc') # 不行
print(res,type(res))
注意:python自身对数字的敏感度较低(精确度低)如果需要精准的计算需要借助于模块numpy...
四:字符串内置方法与操作
类型转换
res = str(11)
print(res,type(res))
res1 = str(11.11)
print(res1,type(res1))
res2 = str('hello')
print(res2,type(res2))
res3 = str([1,2,3,4])
print(res3,type(res3))
res4 = str({'name':'jason',})
print(res4,type(res4))
res5 = str((1,2,3,4,5))
print(res5,type(res5))
res6 = str({1,2,3,4,5})
print(res6,type(res6))
res7 = str(True)
print(res7,type(res7))
字符串内置方法的实际操作
索引取值:单个字符,支持负数
s1 = 'hello world'
# 1.索引取值(起始位置0开始 超出范围直接报错)
print(s1[0]) # h
print(s1[-1]) # d 支持负数 从末尾开始
# 2.切片操作
print(s1[1:5]) # 顾头不顾尾 从索引1一直切取到索引4 # ello
print(s1[-1:-5]) # 默认的顺序是从左往右
print(s1[-5:-1]) # 默认的顺序是从左往右 # worl
# 3.修改切片方向(间隔)
print(s1[1:5:1]) # 默认是1 不间隔 # ello
print(s1[1:5:2]) # 默认是1 换成2是间隔一个取一个 # el
print(s1[-1:-5:-1]) # 从右往左 # dlro
print(s1[:]) # 不写数字就默认都要 # hello world
print(s1[2:]) # 从索引2开始往后都要 # llo world
print(s1[:5]) # 从索引0开始要到4 # hello
print(s1[::2]) # 全都要,每隔一个要一个 # hlowrd
# 4.统计字符串中字符的个数
print(len(s1)) # 11
# 5.移除字符串首尾指定的字符(strip)
username = input('username>>>:').strip()
# username = username.strip()
if username == 'jason':
print('登录成功')
res = ' jason '
print(len(res)) # 9
print(len(res.strip())) # 括号内不写 默认移除首尾的空格 # 5
res1 = '$$jason$$'
print(res1.strip('$')) # jason
print(res1.lstrip('$')) # jason$$
print(res1.rstrip('$')) # $$jason
res1 = '$$jas$on$$' # 只能移除首尾的字符,中间的不变
# 6.切割字符串中指定的字符(用split)
res = 'jason|123|read'
print(res.split('|')) # ['jason', '123', 'read'] #该方法的结果是一个列表
name, pwd, hobby = res.split('|') # 解压赋值
print(res.split('|', maxsplit=1)) # 从左往右切割一个管道符,切指定个数 # ['jason', '123|read']
print(res.rsplit('|', maxsplit=1)) # 从右往左切割一个管道符,切指定个数 # ['jason|123', 'read']
# 7.字符串格式化输出
#format方法1:等价于占位符
res = 'my name is {} my age is {}'.format('jason', 123) # my name is jason my age is 123
print(res)
# format方法2:索引取值并支持反复使用
res = 'my name is {0} my age is {1}'.format('jason', 123) # my name is jason my age is 123
print(res)
res = 'my name is {0} my age is {1} {0} {0} {1}'.format('jason', 123) # my name is jason my age is 123 jason jason 123 # 可以把后面的看成元组
print(res)
# format方法3:占位符见名知意
res = 'my name is {name} my age is {age}'.format(name= 'jason', age=123) # my name is jason my age is 123
print(res)
res = 'my name is {name} my age is {age} {name} {age} {name} '.format(name= 'jason', age=123) # y name is jason my age is 123 jason 123 jason
print(res)
# format方法4:推荐使用
name = input('username>>>:')
age = input('age>>>:')
res = f'my name is {name} my age is {age}' # my name is jason my age is 18
print(res)
# 8.大小写相关
res = 'hElLO WorlD 666'
print(res.upper()) # HELLO WORLD 666
print(res.lower()) # hello world 666
'''图片验证码:生成没有大小写统一的验证码 展示给用户看
获取用户输入的验证码 将用户输入的验证码和当初产生的验证码统一转大写或者小写再比对
'''
code = '8Ja6Cc'
print('展示给用户看的图片验证码, code')
confirm_code =input('请输入验证码').strip()
if confirm_code.upper() == code.upper():
print('验证码正确')
res = 'hello world'
print(res.isupper()) # 判断字符串是否是纯大写 # False
print(res.islower()) # 判断字符串是否是纯小写 # True
# 9.判断字符串中是否是纯数字
res = 'jason'
print(res.isdigit()) # False
res = '123'
print(res.isdigit()) # True
eg:
guess_age = input('guess_age>>>:').strip()
if guess_age.isdigit():
guess_age = int(guess_age)
else:
print('年龄都不知道怎么输吗???')
# 10.替换字符串中指定的内容
res = 'my name is jason jason jason jason jason'
print(res.replace('jason', 'tony')) # my name is tony tony tony tony tony
print(res.replace('jason', 'tony', 1)) # 只替换一个 my name is tony jason jason jason jason 从左往右替换指定个数内容
# 11.字符串的拼接
ss1 = 'hello'
ss2 = 'world'
print(ss1 + ss2) # helloworld
print(ss1 + '$$$' + ss2) # hello$$$world
print(ss1 * 10) # hellohellohellohellohellohellohellohellohellohello
print('|'.join(['jason', '123', 'read', 'JDB'])) # jason|123|read|JDB
print('|'.join(['jason', 123])) # 错误 参与拼接的数据值必须都是字符串
# 12.统计指定字符出现的次数
res = 'hello world'
print(res.count('l')) # 3
# 13.判断字符串的开头或者结尾(startwith)
res = 'jason say hello'
print(res.startswith('jason')) # True
print(res.startswith('j')) # True
print(res.startswith('jas')) # True
print(res.startswith('a')) # False
print(res.startswith('son')) # False
print(res.startswith('say')) # False
print(res.startswith('o')) # False
print(res.startswith('llo')) # False
print(res.startswith('hello')) # False
# 14.其他方法补充
res = 'hello wORld hELlo worLD'
print(res.title()) # Hello World Hello World # 首字母全都大写
print(res.capitalize()) # Hello world hello world # 第一个的首字母大写
print(res.swapcase()) # HELLO WorLD HelLO WORld # 大写变小写 小写变大写
print(res.index('o')) # 4
print(res.find('o')) # 4
print(res.index('c')) # 找不到直接报错
print(res.find('c')) # 找不到默认返回-1
print(res.find('LO')) # 找不到默认返回-1
五:列表内置方法及操作
类型转换
- list(其他数据类型)
- 能够被for循环的数据类型都能转成列表
print(list('hello')) # ['h', 'e', 'l', 'l', 'o']
print(list({'name': 'jason', 'pwd': 123})) # ['name', 'pwd']
print(list((1, 2, 3, 4,))) # [1, 2, 3, 4]
print(list({1, 2, 3, 4, 5})) # [1, 2, 3, 4, 5]
列表内置方法的实际操作
l1 = [111, 222, 333, 444, 555, 666, 777, 888]
# 1.索引取值(正负数)
print(l1[0]) # 111
print(l1[-1]) # 888
# 2.切片操作 与字符串讲解操作一致
print(l1[0:5]) # [111, 222, 333, 444, 555]
print(l1[:]) # [111, 222, 333, 444, 555, 666, 777, 888]
# 3.间隔数 方向 与字符串讲解操作一致
print(l1[::-1]) # [888, 777, 666, 555, 444, 333, 222, 111]
# 4.统计列表中数据值的个数
print(len(l1)) # 8
# 5.数据值修改
l1[0] = 123
print((l1)) # [123, 222, 333, 444, 555, 666, 777, 888]
# 6.列表添加数据值
# 方式1:尾部追加数据值(append)
l1.append('上课')
print(l1) # [123, 222, 333, 444, 555, 666, 777, 888, '上课']
l1.append(['jason', 'kevin', 'jerry'])
print(l1) #当成一个整体添加到里面 [123, 222, 333, 444, 555, 666, 777, 888, '上课', ['jason', 'kevin', 'jerry']]
# 方式2:任意位置插入数据值(insert)
l1.insert(0, 'jason')
print(l1) # ['jason', 123, 222, 333, 444, 555, 666, 777, 888, '上课', ['jason', 'kevin', 'jerry']]
l1.insert(1, [11, 22, 33, 44])
print(l1) # ['jason', [11, 22, 33, 44], 123, 222, 333, 444, 555, 666, 777, 888, '上课', ['jason', 'kevin', 'jerry']]
# 方式3:扩展列表 合并列表
ll1 = [11, 22, 33]
ll2 = [44, 55, 66]
print(ll1 + ll2) # [11, 22, 33, 44, 55, 66]
ll1.extend(ll2) # for循环+append
print(ll1) # [11, 22, 33, 44, 55, 66]
for i in ll2:
ll1.append(i)
print(ll1) # [11, 22, 33, 44, 55, 66]
# 7.删除列表数据
# 方式1:通用的删除关键字del
del l1[0]
print(l1) # [222, 333, 444, 555, 666, 777, 888]
# 方式2:remove
l1.remove(444)
print(l1) # [222, 333, 555, 666, 777, 888]
# 方式3:pop
l1.pop(3) # 括号内填写索引值
print(l1) # [222, 333, 555, 777, 888]
l1.pop() # 默认尾部弹出数据值
print(l1) # [222, 333, 555, 777]
res = l1.pop()
print(res) # 444
res1 = l1.remove(444)
print(res1) # None
# 8.排序
ss = [54, 99, 100, 45, 87, 93, 33, 65, 90, 35, 10]
ss.sort() # 默认是升序
print(ss)
ss.sort(reverse=True)
print(ss) # 改为降序
# 9.统计列表中某个数据值出现的次数
print(l1.count(11))
# 10.颠倒列表顺序
l1.reverse()
print(l1)
六:可变类型与不可变类型
可变类型:
可变类型:值改变 内存地址不变(列表)
l1 = [11, 22, 33]
print(l1)
print(id(l1))
l1.append(44)
print(l1)
print(id(l1))
不可变类型:值改变 内存地址肯定变
res = '$$hello world$$'
print(res)
print(id(res))
res.strip('$')
print(res)
print(id(res))
作业
1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
# 定义用户真实数据
data_source = 'jason|123'
# 1.获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>>:').strip()
# 2.切割字符串 获取真实用户名和密码
real_name, real_pwd = data_source.split('|')
# 3.校验用户名和密码是否正确
if username == real_name and password == real_pwd:
print('登录成功')
else:
print('用户名或密码错误')
2.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
# 1.先获取用户输入的用户名和密码
username = input('username>>>:').strip()
password = input('password>>>>:').strip()
# 2.循环获取列表中每一个真实数据
for data in data_source: # 'jason|123' 'kevin|321'
real_name, real_pwd = data.split('|') # jason 123
if username == real_name and password == real_pwd:
print('登录成功')
break
else:
print('用户名或密码错误')
data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_data = f'{username}|{password}' # username + '|' + password
if user_data in data_source:
print('登录成功')
else:
print('用户名或密码错误')
3.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
# 1.先定义一个专门存储用户名的列表
data_list = []
# 2.添加循环结构
while True:
# 3.先打印项目功能 供用户选择
print("""
1.添加用户
2.查看用户
3.删除用户
""")
# 4.获取用户想要执行的功能编号
choice_num = input('请输入您想要执行的功能编号>>>:').strip()
# 5.根据不同的功能编号执行不同的分支代码
if choice_num == '1':
# 6.获取用户输入的用户名
username = input('请输入您的用户名>>>:').strip()
# 7.判断当前用户名是否已存在
if username in data_list:
print('用户名已存在')
else:
# 8.列表添加用户名
data_list.append(username)
print(f'用户名{username}添加成功')
elif choice_num == '2':
# 9.循环打印每一个用户数据
for name in data_list:
print(
f"""
------------user info---------
用户名:{name}
------------------------------
""")
elif choice_num == '3':
# 10.获取用户想要删除的用户名
delete_username = input('请输入您想要删除的用户名>>>:').strip()
# 11.先判断用户名是否存在
if delete_username in data_list:
data_list.remove(delete_username)
print(f'用户名{delete_username}删除成功')
else:
print('你个傻帽 用户名不存在 删毛线啊!!!')
else:
print('很抱歉 暂时没有您想要执行的功能编号')