3.字符串切片
下标和切片操作
第一个字符索引是0 ,最后一个字符的索引是-1
索引下标运算符[ ] 切片运算符[:] [::2] 表示步长值
py_str="Python"
len(py_str) #查询长度
print("len(py\_str)") #打印py\_str变量的长度
py_str[0] #下标从0开始"Python"[0] 意义一样
print(py_str[0]) #可以截取字符串第一个字符
py_str[6] #索引超出范围,报错
py_str[len(py_str) -1] #字符串总长度减一,得到最后一个字符的下标
py_str[-1] #也可以得到最后一个下标
py_str[2:4] #表示下标包含,结束下标不包含
py_str[2:6] 得到 ‘thon’
py_str[2:600] #下标超出范围,切片不报错 ‘thon’
py_str[2:] #结束下标不写,表示取到结尾
py_str[0:2] 得到‘py’
py_str[:2] 得到 ‘py’ #开始下标不写,表示从开头开始
py_str[2:5] 得到 "tho" #从2开始到5结束 5-2=3
py_str[::2] 得到 "pto" #表示步长值是2
py_str[1::2] 得到 "yhn" #从1开始步长值是2
py_str[::-1] 得到 "nohtyp" #表示从右向左取步长值为-1
py_str + " is cool" #+号表示简单拼接
print(py_str + " is cool" ) 得到 Python is cool
"\*" \* 50 # \*号重复50次
print("\*" \* 50) 得到 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
print(py_str \* 3) 得到 PythonPythonPython
"t" in py_str
print("t" in py_str ) 得到 True
"to" in py_str
print("to" in py_str ) 得到 False
print("to" not in py_str ) 得到 True
4. 列表
可以将列表当成普通的“数组" ,它能保存任意数量,任意类型的Python对象
列表: 它是一个容器,可以存放各种数据
列表
alist = [10 ,20 ,"li" ,"da",[1,2]]
print(len(alist)) 得到5
alist[2:4]
print(alist[2:4]) 得到 ["li","da"]
alist[-1] =100 #列表项可以重新赋值
print(alist) 得到[10,20,"li","da","100"]
alist.append(200) #向列表尾部增加一项
print(alist) 得到 [10,20,"li","da","100","200"]
5. 元组
相当于是静态的列表,它的项目不可变
atuple =(10,20,"li","da")
atuple[-1]
print(atuple[-1]) 得到 da
atuple[0] =100 #报错,元组不能修改
6. 字典
采用key:val 对存储的数据类型,key不能重复
adict={
"name":"大锤","age":18}
adict["name"] # 通过key取出value
print(adict["name"]) 得到 大锤
18 in adict 得到 Flase
"age" in adict 得到True
adict["sex"]="female" #key不在字典中则增加一项
print(adict) 得到{
"name":"大锤","age":18,"sex":"female"}
adict["age"]=20 # age已是字典的key,修改age的值
print(adict) 得到{
"name":"大锤","age":20,"sex":"female"}
—————————————————————————————
按数据类型比较 -----------------------重要、必须背下来
按存储模型分类
-标量类型 : 数值、字符串 标量:只有一种类型,不能存储其他类型。数字、字符串
-容器类型:列表、元组、字典 容器:能包含各种数据。列表、元组、字典
按更新模型分类
-可变类型:列表、字典
-不可变类型:数字、字符串、元组
按访问模型分类
-直接访问:数字
-顺序访问: 字符串、列表、元组
-映射访问:字典
例如:
alist = [10 ,20 ,"li" ,"da",[1,2]]
blist = alist
blist.append(30)
print(alist) 得到[10 ,20 ,"li" ,"da",[1,2],30]
print(blist) 得到 [10 ,20 ,"li" ,"da",[1,2],30] 变得一样所以写程序容易出现bug
blist=alist.copy()
blist.append(30)
print(alist) 得到[10 ,20 ,"li" ,"da",[1,2]]
print(blist) 得到 [10 ,20 ,"li" ,"da",[1,2],30]
二、判断语句
1. if 判断
words = "tom\njeff\njay\nmikes"
if "tom" in words :
print("yes")
if "tom" not in words :
print("not in")
else:
print("tom in words")
if -0.0 :
print("0k") #任何值为0的数字都是False,非0为True //这里不打印
if -0.01 :
print("-0.01 is ok") #这里可以打印True
if ' ' :
print("space is true") #任何非空对象都是True ,空位False ,打印
if '' :
print("空字符串是False") #False不打印
if None:
print("None也是False,表示空") #False不打印
判断合法用户
- 创建login2.py
- 提示用户输入用户名和密码
- 获取相关信息后,将其保存存在变量中
- 如果用户的用户名为bob,密码为123456,则输出Login successful,否则输出Login inorrect
###############################################################################################
2. while循环
判断合法用户
- 创建login2.py文件
- 提示用户输入用户名和密码
- 获取相关信息后,将其保存在变量中
- 如果用户输的用户名为bob,密码为123456,则输出
Login successful ,否则输出Login inorrect
import getpass #导入名为getpass 的模块
username = input("username:")
password = getpass.getpass("password:")
if username == "bob" and password == "123456" :
print("Login successful")
else:
print("Login inorrect")
import random
number = random.randint(1,100) #生成1-100间的随机数字,包含1和100
print("number ->",number)
answer = int (input("猜数1-100:")) #将用户输入的字符数字转成真正的int数字
if answer > number:
print("猜大了")
elif answer< number:
print("猜小了")
else:
print("猜对了")
import random
number = random.randint(1,100)
while True:
answer = int(input("\033[34;1m猜数1-100:\033[0m"))
if answer > number :
print("\033[34;1m猜大了\033[0m")
elif answer <number:
print("\033[34;1m猜小了\033[0m")
else:
print("\033[31;1m猜对了[\033[0m")
break
import random
all_choise = ['石头', "箭头", "布"]
win_list = [['石头', '剪刀'], ['布', '石头'], ['剪刀', '布']]
prompt = """1.石头
2.剪刀
3.布
请出拳(0/1/2):"""
computer = random.choice(all_choise)
index = int(input(prompt))
player = all_choise[index]
print("你的出拳:", player, "计算机出拳:", computer)
if player == computer:
print("\033[32;1m平局\033[0m")
elif [player, computer] in win_list:
print("\033[35;1m你赢了\033[0m")
else:
print("\033[31;1m你输了\033[0m")
import random
tries = 0 #设置计数器,用户最多猜3次
number = random.randint(1,10)
while tries<3:
answer = int(input("猜数(1-10):"))
if answer > number:
print("猜大了")
elif answer < number:
print("猜小了")
else:
print("猜对了")
break
tries +=1
else:
print("数字是:",number)
————————————————————————————————————---------------
3. 三元运算符,也叫条件表达式
例如:
a = 100
b = 80
if a<b:
smaller = a
else:
smaller =b
以上 写法,可简写为
smaller = a if a<b else b
score = int(input("请输入你的成绩:"))
if 70>score>=60:
print("及格")
elif 80>score>=70:
print("良")
elif 90>score>=80:
print("好")
elif score>=90:
print("优秀")
else:
print("你要努力了")
##################################################################################################
4. for循环
for i in :
range(10) 生成列表[0,1,2,3,4,5,6,7,8,9,]
range(6,10) 生成[6,7,8,9,]
例如:
range(5)
print(list(range(5))) //用list函数 把range(5) 转换成列表
得到 [0, 1, 2, 3, 4]
for i in range(3): #[0,1,2] 外侧循环控制打印哪一行
for j in range(i+1): #[0] [0,1] [0,1,2] 内层循环控制行内打印几次
print("hello",end=" ") #多个hello打印到同一行
print(j)
print() #每一行结尾需要打印回车,否则就成为一行
"%sX%s=%s" %(1,2,2) #得到 1X2=2 注释符里面不可以加变量可以加 字符串输出%s占位
打印9*9 乘法表
for i in range(1,10):
for j in range(1,i+1):
print("%sx%s=%s" %(j,i,i\*j),end="\t")
print()
三、实战案例应用
列表解析:快速生成列表
[10] #得到[10]
[10+5] #得到[15]
[10+5 for i in range(1,11)] #得到 [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]
[10+i for i in range(1,11)] #得到 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[10+i for i in range(1,11) if i % 2 == 1] #得到 [11, 13, 15, 17, 19]
["192.168.1."+str(i) for i in range(1,5)] #得到 ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4']
四、文件对象
1. 文件操作的基本步骤 -> 打开、读写、关闭
open及file file Python2才有,Python3已经不用了,用open
open read readline readlines close
2. 实操:在Linux服务器操作
cp /etc/hosts /tmp/hosts
#打开文件,没有指定打开方式,默认以r 读的方式打开,以r打开,不能写。文件不存在则报错
python3
f = open(“/tmp/hosts”) #默认加r打开了
data = f.read() # read 默认将全部内容读入内存
f.close() #关闭文件
print(data)
data #可以查看到原始数据,也就是\n 没有被转换成换行。
f = open("/tmp/hosts")
f.read(10) #读取10个字节
f.read(10) #继续向后读10个字节
f.readline() #读一行
f.readlines
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-HLE0fKkS-1714518038925)]
[外链图片转存中…(img-5K3ngCth-1714518038926)]
[外链图片转存中…(img-ElOFKP85-1714518038926)]
[外链图片转存中…(img-erz75vcX-1714518038926)]
[外链图片转存中…(img-vdWxp283-1714518038926)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新