自学推荐学习网站:https://www.liaoxuefeng.com/wiki/1016959663602400
基本数据类型print("hello world")#第一个python程序helloworld
# 注释
# 单行注释(#)
''' 多行注释一般用于文档说明(三个单引号或者双引号)
多行注释
多行注释
'''
"""
多行注释
多行注释
"""
# 变量命名规则:大小写字母、数字、_,不能以数字开头,不能是关键字
# 查看Python中的关键字
import keyword
print(keyword.kwlist)
# 定义即赋值
# 定义时不需要指定类型,可以自动推断
a = 1
# 查看类型 使用type函数
print(type(a))
# Python是动态数据类型
a = 1.1
print(type(a))
a = "abc"
print(type(a))
# print函数: 打印到控制台
# 打印多个值
print(a, 1, 2, 3, 4, 5, 6, 7)
# 不换行打印
print("hello ", end="")
print("world")
# 5大基本数据类型:
# 整型 int、浮点 float、字符串 str、布尔 bool、空类型 NoneType
int1 = 10
print(int1, type(int1))
float1 = 10.111
print(float1, type(float1))
# 不严格区分单双引号 都是str
# python没有字符类型(java中是char)
str1 = 'abcdefg'
str2 = "abcdefghijklmn"
str3 = 'a'
print(str1, type(str1))
print(str2, type(str2))
print(str3, type(str3))
# 首字母大写
bool1 = True
bool2 = False
print(bool1, type(bool1))
print(bool2, type(bool2))
none = None
print(none, type(none))
# 类型的转换:
# 要转成什么类型就调用对应的 类型方法
# int()、float()、str()、bool()
# 注意要转换的值 必须符合要求
str4 = '123'
# str4 = 'abc'
print(str4, type(str4))
str2int = int(str4)
print(str2int, type(str2int))
str2float = float(str4)
print(str2float, type(str2float))
str2bool = bool(str4)
print(str2bool, type(str2bool))
# 字符串常见的操作
str1 = 'java scala python hadoop hive hbase spark'
print(str1.split(' ')) # 按照指定的分隔符进行切分 返回一个list
# 切片:相当于Java中的substring
# [起始位置:结束位置:步长]
# [起始,结束) 左闭右开
# 起始位置默认是第一个字符 结束位置默认最后一个字符 步长默认为1
print(str1[11:17])
print(str1[-30:-24])
# 步长表示 隔几个元素取一次
print(str1[11:17:2]) # pto
print(str1[11:17:3]) # ph
print(str1[11:17:4]) # po
print(str1[11:17:-1]) #
print(str1[16:10:-1]) #
# 倒转字符串
print(str1[::-1])
# 索引
# 注意:索引越界的问题
print(str1[6])
print(str1[-7]) # 负数索引:从右往左数第几个元素
# 查看字符串的长度
print(len(str1))
# t (tab) 制表符 n 换行符 r 回车符
str2 = ' t n r java scala python hadoop hive hbase spark t t n'
print(str2)
print(str2.strip()) # 去除字符串左右两边的隐藏字符
# 格式化字符串
# 4 * 3 = 12
a = 4
b = 3
print(a, '*', b, '=', a * b)
# 定义一个模板
# {} * {} = {}
str_format = '{} * {} = {}'
print(str_format.format(a, b, a * b))
# %d 表示数字
# %s 表示字符串
# %f 表示小数
# %d * %d = %d
print('%d * %d = %d' % (a, b, a * b))
# 控制输出三位小数
f1 = 1.234567
print('%.3f' % f1)
print("*" * 50)
# 算术运算
i = 10
j = 3
print(i + j)
print(i - j)
print(i * j)
print(i / j)
print(i % j) # 取余
print(i ** j) # i的j次方
print(10 // 6) # 对结果向下取整
print(2 ** 3 ** 2) # 2 的 9 次方
print(10 // 3 // 2) # 从前往后算
# 逻辑运算
# 与或非 and or not
print(True & True) # True
print(True and True) # True
print(True & False) # False
print(True | False) # True
print(True or False) # True
print(True ^ False) # True
print(not True) # False
print(not False) # True
四大数据容器
# Python数据容器 相当于Java中的集合
# 四大数据容器:
# 列表list、元组tuple、字典dict、集合set
''' 一、列表list
特点:
1、list中的每个元素的类型可以不唯一
2、list中的元素可以重复
3、list是可变的,元素可以修改
4、list是有序的
'''
# 定义:
list = [1, 2, 2, 3, 3, 3, 4, 'a', 'b', 'c', 'd', 1.1, 1.2, True, False]
print(list, type(list))
# list 常见操作:
# 通过下标(索引值 index)查找元素
print(list[7]) # 打印输出a
# 切片
# [起始位置:结束位置:步长]
print(list[7:11]) # 打印'a', 'b', 'c', 'd'
print(list[-4:]) # 右边数第四个遍历输出到最后
# 反转
print(list[::-1]) # 步长-1增长输出(实现列表元素反转)
# 修改元素
# 'a'=>'A'
list[7] = 'A'
print(list) # [1, 2, 2, 3, 3, 3, 4, 'A', 'b', 'c', 'd', 1.1, 1.2, True, False]
# 增加元素(append(),insert())
list.append('last')
list.insert(6, 5.5)
print(list)
# 删除元素(remove(),del)
list.remove(5.5) # 根据指定的值移除元素 只会移除一次
del list[6] # 删除索引为6的值
print(list)
# 排序
list2 = [1, 5, 4, 2, 10, 3, 7, 6, 9, 8]
list2.sort(reverse=True) # 降序 从大到小
print(list2)
list2.sort(reverse=False) # 升序 从小到大
print(list2)
# 合并多个list
list3 = [1, 2, 3, 4, 5]
print(list + list2 + list3) # +不会改变原有的list
# [1, 2, 2, 3, 3, 3, 'A', 'b', 'c', 'd', 1.1, 1.2, True, False, 'last', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5]
list2.extend(list3) # 会对list2造成修改
print(list2)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5]
# 反转
list2.reverse()
print(list2)
# 统计元素出现的次数
print(list2.count(1))
# 清空列表
list2.clear()
print(list2)
print("*" * 50)
# tuple元组 (不可变)
# 特点:
# 1、tuple中的每个元素的类型可以不唯一
# 2、tuple中的元素可以重复
# 3、tuple是不可变的
# 4、tuple是有序的
# 定义:
tuple1 = (1, 1, 1, 2, 2, 3, 4, 5, 6, 'a', 'b', 'c', 1.1, True)
print(tuple1, type(tuple1))
# 元组不支持修改
# tuple1[9] = 'A'
# 取元素
print(tuple1[9])
print("*" * 50)
# 集合set (元素不可以重复)
# 特点:
# 1、set中的每个元素的类型可以不唯一
# 2、set中的元素不可以重复 会自动去重
# 3、set是可变的
# 4、set是没有顺序的
# 定义
set1 = {1, 1, 1, 2, 2, 2, 3, 4, 5, "abc", True}
print(set1, type(set1))
# print(set1[0]) # 无序 无法通过索引的方式取元素
set1.pop()
print(set1)
set1.add(2)
set1.add(2)
set1.add(3)
set1.add(6)
print(set1)
# 集合的运算
# 交集 并集 差集 ......
set2 = {1, 2, 3, 4, 5, 6}
set3 = {4, 5, 6, 7, 8, 9}
print(set2 & set3)
print(set2 | set3)
print(set2 - set3)
# 字典 dict 相当于Java中Map
# 特点:
# 1、dict中的每一个元素都是k:v格式的
# 2、dict不支持使用index获取元素,都是通过key取value
# 3、dict是可变的
# 4、dict的key不能重复,是唯一的,key必须是不可变的(基本数据类型、tuple)
# 5、如果key中 1 和 True 以及 0 和 False 同时存在 会进行覆盖
# 6、查询速度不会随着元素的增多而变慢
# 7、dict中value的类型可以是任意的
# 定义
dict1 = {
'k1': 'v1',
'k2': 'v2',
'k2': 'vv2',
0: '0',
1: '1',
2: '2',
(1, 2, 3): 'tuple 1,2,3',
# [4,5,6]:'list 4,5,6'
True: 'True',
False: 'False',
# {'k1':'v1'}:'dict v'
'kk2': 1,
'kk3': 1.1,
'kk4': [1, 2, 3],
'kk5': {
'kkk5': {
'kkkk5': 'vvvv5'
}
}
}
print(dict1, type(dict1))
# print(dict1[0]) # 不支持通过下标取元素
# 通过key取value
print(dict1['k1'])
dict1['k1'] = 'vv1'
print(dict1)
# 推荐使用get获取元素
print(dict1.get('k1'))
print(dict1['k1'])
# print(dict1['kk1'])
print(dict1.get('kk1', '如果key不存在就返回'))
print(dict1.get('kk5').get('kkk5').get('kkkk5'))
# 常见的操作
print(dict1.keys())
print(dict1.values())
print(dict1.items())
# 遍历数据容器
# for 变量名 in 数据容器
list1 = [1, 2, 3, 4, 5]
for i in list1:
# 前面必须有4个空格(语法)
print(i)
# 定义只有一个元素的元组时要加上,
tuple1 = (1,)
print(tuple1, type(tuple1))
tuple2 = (1, 2, 3, 4, 5)
for i in tuple2:
print(i)
set1 = {1, 1, 1, 2, 3, 4, 5, 5, 6}
for i in set1:
print(i) # 打印去重后的结果
dict1 = {
'k1': 'v1',
'k2': 'v2',
'k3': 'v3'
}
# 对key进行遍历
for key in dict1:
print(key, dict1.get(key))
for kv in dict1.items():
print(kv[0], kv[1])
for k, v in dict1.items():
print(k, v)
# 创建一个 1~10的list
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list1)
# 创建一个 1~100的所有的奇数list
# range(起始位置:结束位置:步长)函数
list100 = []
for i in range(1, 101, 1):
list100.append(i)
print(list100)
# 列表推导式
print([i for i in range(1, 101, 1) if i % 2 == 1])
# join 方法 与 split方法相反
str1 = 'java,scala,python'
list3 = str1.split(",")
print(list3, type(list3))
str2 = "t".join(list3)
print(str2, type(str2))
# 9 * 9 乘法表
print("n".join(["t".join(["{} * {} = {}".format(i, j, i * j) for j in range(1, i + 1)]) for i in range(1, 10)]))



