使用字符串
def main():
# 不变字符串
str1 = 'hello,world'
print(len(str1)) # 得到字符串的长度
print(str1.upper()) # 获得字符串首字母大写
print(str1.startswith('he')) # 检查字符串是否以指定的字符串开头
print(str1.endswith('d')) # 检查字符串是否以指定的字符串结尾
print(str1.center(50, '*')) # 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.rjust(50, ' ')) # 将字符串以指定的宽度靠右放置左侧填充指定的字符
str2 = 'abc123456'
print(str2[2]) # c
print(str2[2:5]) # c12
print(str2[-1:-3:-1]) # 65
print(str2.isdecimal()) # 全是数字 False
print(str2.isalpha()) # 全是字母 False
print(str2.isalnum()) # 字母和数字 True
str3 = ' ljl '
print(str3) # ljl
print(str3.strip()) # ljl
Python中存储数据结构的除了字符串还有:列表,元组,集合,字典
列表
下面演示了列表的定义,添加,删除和访问:
def main():
list1 = [10, 20, 30, 40, 50]
print(list1)
list2 = ['ljl'] * 5
print(list2)
print(len(list1)) # 计算列表长度(元素个数)
print(list1[0]) # 下标(索引)运算 索引的范围是[0,n-1]
print(list1[4])
print(list1[-1]) # 得到最后一个值
list1[2] = 300
print(list1)
list1.append(200) # 添加元素,添加到列表最后
list1.insert(1, 400) # 在指定位置添加元素
list1 += [1, 2] #添加列表
print(list1)
print(len(list1))
list1.remove(3) # 删除列表中3这个元素
if 1in list1:
list1.remove(1)
del list1[0]
print(list1)
# 清空列表元素
list1.clear()
print(list1)
if __name__ == '__main__':
main()
列表也可以做切片:
def main():
list1=['ljl', 'ly', 'haha']
list1 += ['apple', 'orange']
for val in list1:
print(val, end=' ')
# 列表切片
list2 = [1, 2, 3, 4]
list3 = list2[1:3]
print(list3)
list4 = list2[:]
print(list4)
# 当然我们也可以设置切片的步长
list5 = list2[::2]
if __name__ == '__main__':
main()
列表的一系列操作:
def main():
f = ['a', 'b', 'd', 'c', 's', 'f', 'g']
# python内置的排序方法默认都是升序排序(从小到大)
# 如果希望排列成降序(从大到小)可以通过reverse参数来指定
# Python中的函数几乎都是没有副作用的函数
# 调用函数之后不会影响传入的参数
f2 = sorted(f, reverse=True) # 函数
print(f)
print(f2)
f.sort(reverse=True) # 改变f的自身 当resverse = True时候则会倒序
print(f)
f.sort() # 会改变本f自身进行排序
print(f)
if __name__ == '__main__':
main()
列表可以使用生成式语法来生成一个列表:
def main():
f = [x + y for x in 'ABCD' for y in '1234567']
print(f)
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)
print(sys.getsizeof(f))
# 列表生成器 这里得到的不是一个列表 而是一个生成器对象
# 通过生成器可以获取到数据 它不占用额外的空间储存数据
# 每次需要数据的时候就通过生成器获取数据 当然这需要花费时间
f = (x ** 2 for x in range(1, 10))
print(sys.getsizeof(f))
for val in f:
print(val, end=' ')
if __name__ == '__main__':
main()
除了上面的生成器语法之外,我们还可以在函数之中定义,使用关键字yield
并且函数中的return
关键字应当移除:
斐波拉契数列
def fib(n):
a, b = 0, 1
for _ in range(n):
a,b = b, a+b
yield a
if __name__ == '__main__':
for val in fib(10):
print(val, end=' ')
"""
运行结果:1 1 2 3 5 8 13 21 34 55
"""
元组
元组和列表比较相似,只不过元组里面的元素是不可以更改的而且元组在创建的时间和储存的空间上都优于列表:
def main():
tuple1 = (1, 1, 2, 2, 3, 3) # 定义一个元组
print(tuple1) # 打印出整个元组
for val in tuple1:
print(val, end=' ') # 遍历的到元组中的值
# 不可以使用索引号给元组中的元素赋值 但是可以将元组全部重新定义
tuple1 = (2, 1, 2, 2, 3, 3)
print(tuple1)
# 可以将元组转化成列表
list1 = list(tuple1)
print(list1)
# 列表是可以修改它之中的每一个元素
list1[0] = 5
print(list1)
# 相对应的 列表也可以转化成元组
tuple2 = tuple(list1)
print(tuple2)
if __name__ == '__main__':
main()
集合
Python中的集合和数学上的集合是一样的,不允许有重复的数据出现,而且也有交集、并集、差集。
def main():
# 定义一个集合
set1 = {1, 1, 2, 2, 3, 3}
print(set1)
set1.add(4)
set1.add(5)
set2 = {1, 3, 5, 7, 9}
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 ^ set2 对称差运算
print(set3)
# 集合是没有顺序的 所以不能用索引序号
for val in set2:
print(val)
set4 = {1, 2, 10}
print(set4.issubset(set1)) # 子集 set4 <= set1
print(set1.issuperset(set4)) # 超集 set1 >= set4
print(set1.pop()) # 随机删除集合里面的元素
print(set1)
set1.remove(2)
print(set1)
print(set1)
if __name__ == '__main__':
main()
字典
字典可以储存任意一个数据,字典里面的元素是一个键和一个值组成(键值对),键和值用冒号隔开。
def main():
dict1 = {'name': 'ljl', 'age': 24, 'gender': True}
print(dict1['name'])
print(dict1['age'])
print(dict1['gender'])
dict1['name'] = 'ljl'
del dict1['gender'] # 删掉其中的元素
# 字典的遍历其实就是通过字典的键取到对应的值
for x in dict1:
print(x,'---->', dict1[x])
# 更新字典中的元素
dict1['name'] = 'ljl'
dict1['age'] = '23'
print(dict1)
dict1.update(age=10) # 直接更新字典中键对应的值
print(dict1)
# get 方法 通过键来获取相应的值,如果没有该键则第二个参数就是其默认值
print(dict1.get('z=ly', 10))
print(dict1.get('name', 10))
# 删除字典中的元素
# dict1.popitem() # 删掉字典中的所有元素
print(dict1.pop('name')) # 删掉字典中的key=name的元素
print(dict1)
# 清空字典
dict1.clear()
print(dict1)
# dict1.setdefault('motto','成年人的世界里没有容易二字')
if __name__ == '__main__':
main()
练习题
1.文件后缀名生成
# 给你一个文件名取出文件的后缀名
def file_suffix(file, has_dot=False):
"""
得到文件后缀名
:param file: 文件名
:param has_dot: 后缀是否带点(.)
:return: 文件后缀名
"""
pos = file.rfind('.')
if 0 < pos < len(file) - 1:
index = pos if has_dot else pos + 1
return '文件的后缀名是:'+file[index:]
else:
return ''
if __name__ == '__main__':
my_file = input('请输入一个文件名:')
print(file_suffix(my_file))
print(file_suffix(my_file, True))
2.指定某天计算出改天是当年的第几天
# 设计一个函数传入年月日返回这一天是这一年的第几天
def is_today(y, m, d):
num = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
total = 0
for x in range(m-1):
total += num[x]
if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
if m > 2:
total += 1
return total + d
def main():
year = int(input('year = '))
month = int(input('month = '))
day = int(input('day = '))
print(is_today(year, month, day))
if __name__ == '__main__':
main()
3.杨辉三角
def yhsn(num):
list1 = [[1], [1, 1]]
for x in range(2, num):
list2 = [1]
for y in range(x - 1):
list2.append(list1[x-1][y]+list1[x-1][y+1])
list2.append(1)
list1.append(list2)
return list1
if __name__ == '__main__':
n = int(input('请输入杨辉三角的行数:'))
print(yhsn(n))