学习总结五
字符串
Python 中最常用的数据类型,可以用引号(‘或”)来创建字符串
字符串运算符
str = 'abc123456'
print(str[2]) # []表示下标运算符,取出第二位'c'
print(str[2:]) # 表示从2取到结尾
print(str[2::2]) # 表示从第2位取元素,步长为2
print(str[::2]) # 表示从首位取,步长为2
print(str[::-1]) # 表示从后向前排序(倒序)
print(str[2:5]) # 字符串切片操作,取一部分(开始从0数,结束从1数)
print(str[-1]) # 表示从后取首位
print(str[-1:-3:-1]) # 第一个-1表示开始,-3表示结束(取不到),最后-1表示方向
字符串内置函数
str = 'hello, world!'
print(str.isdigit()) # 检查字符串是否全是数字
print(str.isalpha()) # 检测字符串是否由字母和数字组成
print(str.isalnum()) # 检查所有字符是否由字母或者数字组成
print(len(str1)) # 求字符串长度
print(str.capitalize()) # 将字符串的第一个字母变成大写,其他字母变小写
print(str.upper()) # 将字符串中的小写字母转为大写字母
print(str.find('or')) # 查找or
print(str.find('shit'))
print(str.index('or'))
print(str.index('shit'))
print(str.startswith('He')) # 检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False
print(str.startswith('hel'))
print(str1.endswith('!')) # 判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False
print(str1.center(50, '*')) # 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格
print(str1.rjust(50, ' '))
练习
练习1
循环播放文字
#import os 表示清屏
import time
def main():
content = '欢迎来千峰!'
while True:
#os.system('cls')
print(content)
time.sleep(0.5)
content = content[1:] + content[0]
if __name__ == '__main__':
main()
练习2
判断字符串是否由字母和数字组成
def main():
str2 = 'abc123456'
print(str2.isalnum())
if __name__ == '__main__':
main()
列表
1.有了列表容器,我们可以使用一个变量保存多个数据
2.更为重要的是我们可以使用循环对列表中的数据进行操作
3.python内置的排序方法默认都是升序(从小到大),如果希望排降序(从大到小)可以通过reverse参数来指定
def main():
list1 = [1, 3, 5, 7, 100]
print(list1)
list2 = ['hello'] * 5
print(list2)
# 计算列表长度(元素个数)
print(len(list1))
# 下标(索引)运算
print(list1[0])
print(list1[4])
# print(list1[5]) # IndexError: list index out of range
print(list1[-1])
print(list1[-3])
list1[2] = 300
print(list1)
# 添加元素
list1.append(200)
list1.insert(1, 400)
list1 += [1000, 2000]
print(list1)
print(len(list1))
# 删除元素
list1.remove(3)
if 1234 in list1:
list1.remove(1234)
del list1[0]
print(list1)
# 清空列表元素
list1.clear()
print(list1)
if __name__ == '__main__':
main()
列表排序等问题
def main():
list1 = ['orange', 'apple', 'zoo', 'internationalization', 'blueberry']
list2 = sorted(list1)
# sorted函数返回列表排序后的拷贝不会修改传入的列表
# 函数的设计就应该像sorted函数一样尽可能不产生副作用
list3 = sorted(list1, reverse=True)
# 通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
list4 = sorted(list1, key=len)
print(list1)
print(list2)
print(list3)
print(list4)
# 给列表对象发出排序消息直接在列表对象上进行排序
list1.sort(reverse=True)
print(list1)
if __name__ == '__main__':
main()
列表生成式
def main():
# 用的方括号[]
# 列表生成表达式语法, 创建列表容器
# 创建列表之后元素以及准备就绪,所以需要耗费较多的内存空间
f = list(range(1, 10))
# 上面这个不常用
print(f)
# 下面的是常用的
f = [x for x in range(1, 10)]
print(f)
f = [x ** 2 for x in range(1, 10)]
print(f)
f = [x ** x for x in range(1, 10)]
print(f)
# 用的圆括号()
# 列表生成器 得到的不是列表,而是一个生成器对象
# 通过生成器可以获取数据,不占用额外的内存空间
# 每次需要数据的时候就通过生成器取出数据,节约空间耗费时间
f = (x ** x for x in range(1, 10))
print(f)
for val in f:
print(val)
f = (x ** 2 for x in range(1, 10))
print(f)
for val in f:
print(val)
if __name__ == '__main__':
main()
练习1
摇色子计出现点数次数
from random import randint
def main():
# 我们可以使用一个变量保存多个数据
# 我们可以使用循环对列表中的数据进行操作
f = [0] * 6
# 变量f[]表示列表(容器)
for _ in range (6000):
face = randint(1, 6)
f[face - 1] += 1
print(f)
if __name__ == '__main__':
main()
练习2
f = [100, 200, 500]
for index, val in enumerate(f):
# index表示索引排列序号
# val表示遍历列表
print(index, ':', val)
def main():
f = [100, 200, 500]
# CRUD操作
f.append(123)
print(f)
f.insert(1, 300)
print(f)
if 500 in f:
f.remove(500)
# f.clear # 清空列表
del f[3]
print(f)
练习4
菲波拉切数列
def main():
f = [1, 1]
print(f)
for x in range(2, 21):
x = f[x - 1] + f[x - 2]
f.append(x)
print(f)
if __name__ == '__main__':
main()
练习5
查找列表中的最大值最小值和平均值
def main():
scores = [95, 78, 62, 99, 45, 32, 80]
min_score = max_score = scores[0]
total = 0
for score in scores:
if score > max_score:
max_score = score
elif score < min_score:
min_score = score
total += score
print('最高分:',max_score)
print('最低分:',min_score)
print('平均分:%.2f' % (total / len(scores)))
if __name__ == '__main__':
main()
练习6
双色球选号
import random
def main():
n = int(input('投注注数:'))
red_ball = [x for x in range(1, 34)]
blue_ball = [x for x in range(1, 17)]
for _ in range(n):
f1 = random.sample(red_ball, 6)
f2 = sorted(f1)
f3 = random.sample(blue_ball, 1)
f2.append(f3[0])
print(f2)
if __name__ == '__main__':
main()
练习7
查找列表中第二大的数
def second_max(x):
# tuple--元组
(m1, m2) = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])
for index in range(2, len(x)):
if x[index] > m1:
m2 = m1
m1 = x[index]
elif x[index] > m2:
m2 = x[index]
return m1, m2
def main():
my_list = [1, 2, 3, 5, 0, 7]
print(second_max(my_list))
if __name__ == '__main__':
main()
元组
元组与列表类似,不同之处在于元组的元素不能修改,在前面的代码中我们已经不止一次使用过元组了。顾名思义,我们把多个元素组合到一起就形成了一个元组,所以它和列表一样可以保存多条数据。下面的代码演示了如何定义和使用元组。
def main():
# 定义元组
t = ('骆昊', 38, True, '四川成都')
print(t)
# 获取元组中的元素
print(t[0])
print(t[3])
# 遍历元组中的值
for member in t:
print(member)
# 重新给元组赋值
# t[0] = '王大锤' # TypeError
# 变量t重新引用了新的元组原来的元组将被垃圾回收
t = ('王大锤', 20, True, '云南昆明')
print(t)
# 将元组转换成列表
person = list(t)
print(person)
# 列表是可以修改它的元素的
person[0] = '李小龙'
person[1] = 25
print(person)
# 将列表转换成元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
print(fruits_tuple)
if __name__ == '__main__':
main()
集合
Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算;
集合无下标运算,因为是无序排列的;
集合中不能查找对应序号的元素(find())
def main():
list1 = [1, 1, 2, 2, 3, 3]
print(list1)
tuple1 = (1, 1, 2, 2, 3, 3)
print(tuple1)
# 元组
set1 = {1, 1, 2, 2, 3, 3}
print(set1)
# 集合
set2 = {1, 3, 5, 7, 9}
print(set2)
set3 = set1.intersection(set2) # 交集
# set3 = set1 & set2 一样表示交集
print(set3)
set3 = set1.union(set2) # 并集
# set3 = set1 \ set2 同样表示并集
print(set3)
set3 = set1.difference(set2) #差集
# set3 = set1 - set2
print(set3)
set3 = set2.difference(set1)
print(set3)
set3 = set1.symmetric_difference(set2) #对称差集
# set3 = set1
print(set3)
print(set2.pop()) #随机选取一个元素
for val in set2:
print(val)
if 3 in set2:
set2.remove(3) #查找集合中有无3,移除3
if __name__ == '__main__':
main()
字典
def main():
dict1 = {'name': '瞿凯', 'age': '24', 'gender': True}
print(dict1['name'])
print(dict1['age'])
print(dict1['gender'])
dict1['name'] = '张三'
dict1.update(heighut=170, fav=['吃', '睡']) # 添加元素
print(dict1.pop('age')) # 删除,并返回值
print(dict1.popitem())
del dict1['gender'] # 删除key
print(dict1)
for x in dict1:
print(x, '--->', dict1[x]) # 遍历的格式
dict1.setdefault('motto','生活不止眼前的苟且')
if 'motto' in dict1:
print(dict1['motto'])
else:
print('呵呵')
if __name__ == '__main__':
main()