python学习笔记

昨日内容回顾

  • 循环结构之for基本语法
    for 变量名 in可迭代对象: 字符串,列表,字典,元组,集合
    循环体代码
    能够自动结束循环(当被取值的数据里面没有数据值可取)
    1.循环字符串是挨个取出一个个字符
    2.循环列表是挨个取出一个个数据值
    3.循环字典是挨个取出一个个K值
  • range多种用法
    range(10) 等价于 range(0,10,1)
    range(1,10) 等价于 range(1,10,1)
    range(1,10,2)等价于 range(1,10,2)
    在python2中有
    range() 直接产生列表
    xrange() 类似于加工厂
    在python3中有
    range() 类似于加工厂
  • range网络爬虫案例
    很多时候,事物都有一定的规律
    博客园网址为例
  • for结合其他关键字
    for + break
    for + continue
    for + else
    三者的使用方式与while一致

今日内容概要

  • 作业讲解
  • 数据类型的内置方法

今日内容详细

作业讲解

1.计算1-100所有的数之和

total_num = 0    # 定义它们的和从0开始
for i in range(1, 101):   # 创建一个1到100的循环
    total_num += i   # 循环自增和
print(total_num)   # for循环字节数,直接调用变量名即可访问总和

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]

count_num = 0  # 定义存储2出现次数的计数器
for i in l1:
    if i == 2:  # 循环判断每一个数据值是否是2
        count_num += 1  # 如果是2则自增1
print(count_num)  # for循环结束 直接调用变量名即可访问总次数

3.编写代码自动生成所有页网址
https://movie.douban.com/top250

# 1.想办法获取到 0 25 50 75 ... 225 等差数列
# 2.利用格式化输出即可完成
# 3.验证是否正确
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 j in range(4):
    for i in range(5):
        print('*', end='')
    print()  # 内层循环循环结束一次 添加一个换行  print()自带换行

数据类型的内置方法简介

内置方法可以简单的理解成是每个数据类型自带的功能(每个人的不同特长)
使用数据类型的内置方法统一采用句点符
数据类型.方法名()
eg:'jason'.字符串具备的方法()
name = 'jason'
name.字符串具备的方法()
ps:如何快速查看某个数据类型的内置方法:
借助于编辑器自动提示
我们在学习内置方法的过程中还会穿插一些其他用法
eg:索引取值 按k取值

整型相关方法

1.关键字
int(),int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号(包括小数点),则会报错
2.整型就是整数,主要用于计算,没有内置方法
3.类型转换
int(待转换的数据)

 age = input()
 age = int(age)
 print(type(int('123')))  # 字符串内部是纯数字情况,可以转换
 print(type(int('123a321')))  # 字符串里面必须是纯数字才可以转换,有别的就报错
 print(type(int('123.33')))  # 小数点也不行

4.进制转换
二进制,八进制,十进制,十六进制
十进制转其他进制

print(bin(100))  # bin() 将十进制转二进制    0b1100100  0b是二进制数的标识
print(oct(100))  # oct() 将十进制转八进制    0o144      0o是八进制数的标识
print(hex(100))  # hex() 将十进制转十六进制  0x64       0x是十六进制数的标识
如果数字前面没有任何标识 默认就是十进制

其他进制转十进制

# 自动识别进制数
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

浮点型相关方法

1.关键字
float
2.类型转换

print(float('123'))  # 123.0
print(type(float('123')))  # float
print(float('123a123'))
print(float('123.12'))  # 可以识别一个小数点
print(float('123.123.1.2.2.2.2.2.2'))  # 报错

3.针对布尔值的特殊情况

print(float(True))  # 1.0
print(float(False))  # 0.0
print(int(True))  # 1
print(int(False))  # 0

补充说明

a = 23.00
b = 1.2
c = a * b
print(c)  # 27.599999999999998

python对数字不敏感,很容易出错
那python为什么还能做人工智能,数据分析,金融量化?
是因为基于python开发的模块非常牛逼!!!

字符串相关方法

1.关键字

str

2.类型转换

类型转换:兼容所有数据值

print(str(123), type(str(123)))
print(str(123.11), type(str(123.11)))
print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4])))
print(str({'name': 'jason'}), type(str({'name': 'jason'})))
print(str(True), type(str(True)))
print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4))))
print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4})))

3.需要掌握的方法

内置方法不需要死记硬背,掌握几个常见的即可
后续遇到新的,直接代码执行查看即可

1.索引取值:单个字符,支持负数

1)正向取(从左往右) ,索引从0开始,str[3]
2)反向取(负号表示从右往左) ,索引从-1开始,str[-3]
强调:字符串为不可变类型,只能按照索引取值,不能改

s1 = 'hello jason!'
print(s1[0])  # h
print(s1[-1])  # !
print(s1[-2])  # n

2.切片取值:多个字符,支持负数,切片的顺序默认从左往右

s1 = 'hello jason!'
print(s1[0:3])  # hel  从索引0的位置开始切到索引2的位置 顾头不顾尾
print(s1[-1:-4])  # 切片的顺序默认从左往右
print(s1[-1:-4:-1])  # !no 可以通过第三个参数的正负一 控制方向
print(s1[-4:-1])  # son  顾头不顾尾

3.间隔/方向

s1 = 'hello jason!'
print(s1[:])  # 所有
print(s1[::2])  # 针对整个字符串 隔一个取一个
print(s1[0:5:1])  # hello  默认1可以不写
print(s1[0:5:2])  # hlo

间隔方向默认从左往右

4.统计字符串中字符的个数

len可以获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符,空格也算字符

print(len('hello jason!')) # 12 空格也算字符

5.移除字符串首尾指导的字符

1.括号内不指定字符,默认移除首尾空白字符(包括空格、\n、\t)
2.括号内指定字符,移除首尾指定的字符

name = '  jason  '
res = name.strip()
print(name, len(name))  #   jason   9
print(res, len(res))  # jason 5

字符串调用内置方法 不是改变原数据 而是产生了新的数据

desc1 = '$$jason$$'
print(desc1.strip('$'))  # jason
print(desc1.lstrip('$'))  # jason$$          left 左消除
print(desc1.rstrip('$'))  # $$jason          right 右消除


username = input('username>>>:')
username = username.strip()
username = input('username>>>:').strip()  # 先获取用户输入 再立刻移除首尾空格 最后绑定给变量名username
if username == 'jason':  # 'jason ' == 'jason'
    print('登录成功')
else:
    print('你不是jason!')

6.按照指定的字符切割字符串

当字符串中出现了连续的特征符号 应该考虑使用切割操作
1.括号内不指定字符,默认以空格作为切分符号
2.括号内指定分隔字符,则按照括号内指定的字符切割字符串

info = 'jason|123|read'
res = info.split('|')  # 切割字符串之后结果是一个列表
print(res, type(res))  # ['jason', '123', 'read'] <class 'list'>
name, pwd, hobby = info.split('|')  # name, pwd, hobby = ['jason', '123', 'read']
print(info.split('|', maxsplit=1))  # 从左往右 只切一次  ['jason', '123|read']
print(info.rsplit('|', maxsplit=1))  # 从右往左 只切一次  ['jason|123', 'read']

使用切割字符时,默认从左往右切割,若rsplit时,则为从右往左切割
当需要切割次数时,使用maxsplit,当后面的数值为多少就是切割多少次

7.字符串大小写相关

s2 = 'HeLLo Big BAby 666 你过的还好吗'
print(s2.lower())  # hello big baby 666 你过的还好吗
print(s2.upper())  # HELLO BIG BABY 666 你过的还好吗
print(s2.islower())  # 判断字符串中所有的字母是否是全小写  False
print(s2.isupper())  # 判断字符串中所有的字母是否是全大写  False
print('aaa'.islower())  # True
rint('AAA'.isupper())  # True


code_upper = code.upper()  # 将网页返回的验证码转大写
confirm_code_upper = confirm_code.upper()  # 将用户填写的验证码转大写
if code_upper == confirm_code_upper:  # 统一转大写 或者小写 再做比对
if confirm_code.upper() == code.upper():  # 统一转大写 或者小写 再做比对
    print('验证码正确')
else:
    print('验证码错误')

使用lower()或者upper()可将字符串中所有字母进行大小写转换
若使其前面加is则为判断该字符串是否全是大写,小写

8.字符串的格式化输出

方式1: 等价于%s占位 没有什么优势

res1 = 'my name is {} my age is {}'
print(res1.format('jason', 18))
输出结果:
my name is jason my age is 18

方式2: 支持索引取值 并且支持重复使用

res2 = 'my name is {0} my age is {1} {0} {1} {1} {1}'
print(res2.format('jason', 18))
输出结果:
my name is jason my age is 18 jason 18 18 18

方式3: 支持关键字取值(按k取值) 并且支持重复使用

res3 = '{name} {name} {age} my name is {name} my age is {age}'
print(res3.format(name='jason', age=18))
输出结果:
jason jason 18 my name is jason my age is 18

方式4:推荐使用(******)

name = 'jason'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
输出结果:
my name is jason my age is 18 jason 18

9.统计字符串中指定字符出现的次数

res = 'sdashdjasdwjjkashdjasdjqwhasjdjahdjwqhdjkasdhwsdaadadadadad'
print(res.count('j'))
print(res.count('ad'))
输出结果:
9
5

使用count()统计字符串中指定字符出现的次数

10.判断字符串的开头或者结尾

res = 'jason say ha ha ha heiheihei'
print(res.startswith('jason'))
print(res.startswith('j'))
print(res.startswith('b'))
print(res.endswith('heiheihei'))
print(res.endswith('hei'))
print(res.endswith('h'))
输出结果:
True
True
False
True
True
False

使用startswith,endswith来判断字符串的开头或者结尾

11.字符串的替换

res = 'jason jason jason SB SB SB'
print(res.replace('jason', 'tony'))  # 从左往右全部替换
print(res.replace('jason', 'tony', 1))  # 从左往右替换指定个数
输出结果:
tony tony tony SB SB SB
tony jason jason SB SB SB

使用replace()可以将字符串中代码进行替换

12.字符串的拼接

res1 = 'hello'
res2 = 'world'
print(res1 + res2)  # 字符串支持加号拼接
print(res1 * 10)  # 字符串支持乘号重复
print(''.join(['hello', 'world', 'hahaha']))  # join方法拼接
print('|'.join(['hello', 'world', 'hahaha']))  # join方法拼接
print('$'.join(['jason', 'say', 666]))  # 列表中的数据都必须是字符串类型  报错!!!
输出结果:
helloworld
hellohellohellohellohellohellohellohellohellohello
helloworldhahaha
hello|world|hahaha
报错

字符串的拼接支持+ * 形式的拼接,拼接的结果为没有间隔的数据。
当使用join()方法进行拼接时,join前的单引号中若为|则使用|来将其拼接结果进行分割。若为空则视为没有间隔
列表中的数据都必须是字符串类型否则报错。

13.判断字符串中是否是纯数字

print('123'.isdigit())  # True
print('123a'.isdigit())  # False
print(''.isdigit())  # False

使用isdigit()判断字符串中是否是纯数字

14.查找某个字符对应的索引值

res = 'hello world jason'
print(res.index('d'))  # 10
print(res.find('d'))  # 10
   '''index查找索引 如果没有则报错'''
print(res.index('d',0,5))
   '''find查找索引 如果没有则返回-1'''
print(res.find('d',0,5))  # -1

使用index()时,如果在字符串中没有找到对应字符,则返回一个报错
使用find()时,如果在字符串中没有找到对应字符,则返回-1,不抛出报错。

15.正文相关操作

res = 'my name is jason'
print(res.title())  # My Name Is Jason
print(res.capitalize())  # My name is jason

capitalize(): 字符串第一个字母大写
title(): 字符串内的所有单词的首字母大写

列表相关方法

1.关键字

list

2.类型转换

能够被for循环的数据类型都可以转换成列表

print(type(list(123))) # 整型
print(type(list(123.22))) # 浮点型
print(type(list('123243jasdsad')), list('123243jasdsad')) # 字符串
print(type(list({'name':"jason",'pwd':123})), list({'name':"jason",'pwd':123})) # 字典

3.需要掌握的方法

1.索引取值

l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[0])
print(l1[-1])
输出结果:
jason
tony

2.切片操作

l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[0:3])
print(l1[:])
print(l1[-4:-1])
输出结果:
['jason', 'kevin', 'oscar']
['jason', 'kevin', 'oscar', 'tony']
['jason', 'kevin', 'oscar']

3.间隔/方向

l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[::2])
输出结果:
['jason', 'oscar']

4.统计列表中数据值的个数

l1 = ['jason', 'kevin', 'oscar', 'tony']
print(len(l1))  # 4

作业

1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确

data_source = 'jason|123'
name, paw = data_source.split('|')  # 将切好的值赋值给name,paw
for i in range(3):
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()  #获取用户用户名密码再立刻移除首尾空格,最后绑定给变量
    if username == name and password == paw:
        print('登录成功')
        break
    else:
        print('登录失败')

image
2.基于列表充当数据库完成用户登录(拔高练习) 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']

data_source = ['jason|123', 'kevin|321','oscar|222']
username = input('username>>>:').strip()
password = input('password>>>:').strip()  # #获取用户用户名密码再立刻移除首尾空格,最后绑定给变量
for i in data_source:
    if username == i.split('|')[0] and password == i.split('|')[1]:  # 将变量完全等于切好的数值eg:username==jason and password==123
        print('登录成功')
        break
else:
    print('登录失败')

image

posted @   空白o  阅读(234)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示