# 第一部分 print函数
# print是函数名,括号里填参数
print(1) # 整数
print("1") # 字符串
print(1+1) # 表达式
print("*"*10) # 表达式
# print函数可以接收任意数量的参数,每个参数之间逗号隔开(所有函数通用)
print(1, "1", 1+1, "*"*10)
# 多参数输出时,每项之间有空格
# 每次print函数输出后,会自动加一个换行的结束符
# 如果不需要换行,可以修改print函数的结束符为空字符,如下所示:
print(1, end="")
# 第二部分 变量
# 变量命名能用的符号:数字、字母、_。 python关键字不能用作变量名:list、if、else、for、while等等。
# 变量命名不能以数字开头
# 变量赋值,可以存任何类型数据,python的变量是动态类型。
a = 1 # 变量a赋值为数字1
print(a) # 打印变量a的内容
a = "nihao" # 修改了变量a的内容
print(a)
a = [1, 2, 3]
print(a)
b = a # 变量也可以给变量赋值
print(b)
# 多变量赋值
x = y = z = 1 # 都赋值为同一个值
print(x, y, z)
x, y, z = 1, 2, 3 # 赋值为不同的值
print(x, y, z)
# 可以用列表给多变量赋值
x, y, z = [1, 2, 3]
print(x, y, z)
# 第三部分 input函数
# input是一个有返回值的函数,需要一个变量来存这个返回值(print没有返回值)
s = 0
# s = input() # 可以没有参数
print(s)
# s = input("提示信息") # 也可以有一个字符串参数作为输入时的提示信息
print(s)
# 一个变量里同时只能存一个信息,如果要同时存多个信息,用多个变量或列表等数据结构来存。
# input获取输入内容返回时一定是字符串类型的。
# 如何查看变量类型;使用type()函数
print(type(s)) # 返回类型<class 'str'>
# 先运行type(s)获取变量s的数据类型,获取的类型就是type函数返回值,
# 返回值就原地作为print的参数
# 常见问题:输入的信息如果用于数学计算,要先把输入信息的类型从字符串转为数字
# 第四部分 数据类型及类型转换
# 常用基础数据类型:整型(整数)、浮点型(小数)、布尔型(只有真假的特殊整型)、字符串
# 常用的高级数据类型:列表、字典
print(type(1))
print(type(1.1))
print(type("123"))
# 类型转换使用类型名对应的转换函数
# 整型对应int() 浮点型对应float() 字符串对应str()
# 如果无法转换,程序就会报错。比如:
int("1") # 可以转换,转换后作为返回值,有返回值了就可以给变量赋值或者作为函数(如print)的参数
# int("a") # 无法转换,程序报错
# 需要注意的一类类型转换:小数到整数的转换
print(int(1.5)) # 不会四舍五入,是直接舍弃小数部分,也叫向下取整
# 思考:
# print(int("1.1")) # 报错
# 第五部分 算术运算符:+ - * / % // **
print("ni" + "hao") # 运算结果:"nihao",字符串的加法是拼接
print("ab" * 3) # 运算结果:"ababab",把字符串重复10次拼接在一起
print(10 % 3) # 什么时候用到取余(取模):判断奇偶数、判断质数等。判断是否能整除时想到使用取余
print(10 // 3) # 整除/取整数商/向下取整
print(2**3) # 幂运算
# 第六部分 比较运算符和布尔型(只有真假的特殊整型)
# 布尔型:True或False, True相当于整数的1, False相当于整数的0
print(2 == 2) # 判断是否相等用双等号,和单等号的赋值区别开
print(2 != 2) # 判断是否不相等用双等号,当左右两边的数确实不相等时为真
print(2 > 3) # 判断2是否大于3, 结果为假
print(2 < 3) # 判断2是否小于3,结果为真
print(3 >= 2) # 判断3是否大于等于2,结果为真
print(3 <= 2) # 判断3是否小于等于2,结果为假
# 怎么理解>=,<=。>和=组合成>=, <和=组合成<=。
# 3 >= 2拆成两个:3 > 2 和 3 == 2。大于和等于是或的逻辑关系,一个数不可能即大于又等于另一个数。
a = 2 == 2 # 2 == 2的运算结果是布尔型True,结果赋值给变量a
print(a)
# 第七部分 逻辑运算符 and(并且、与) or(或者、或) not(相反、非)
3 > 2 and 5 > 4
# and只有当两个条件都为真是才为真,其他情况都为假。
# 什么叫其他情况:有四种可能性,其他情况是除了都为真的剩下的三种可能。
# 真 and 真 结果为真
# 真 and 假 结果为假
# 假 and 真 结果为假
# 假 and 假 结果为假
# 运算符优先级:括号>算术运算符>比较运算符>逻辑运算符>赋值运算符
3 > 2 or 5 < 4
# or当两个条件之一为真即为真,只有两个都为假时才为假。
# 真 or 真 结果为真
# 真 or 假 结果为真
# 假 or 真 结果为真
# 假 or 假 结果为假
not 3 > 2
# 真变为假,假变为真
# 逻辑运算符难点在于如何把题目(任务)的语言描述转化为对应的逻辑。
# 第八部分 字符串和列表
# 索引01234
s = "hello" # 单引号或双引号包裹的内容是字符串
# 索引 0 1 2 3 4
l = ["h", "e", "l", "l", "o"] # 中括号是列表
# 字符串和列表的相似之处:可以用下标单独取出其中的元素
# 什么是下标:也可以叫索引或者序号...,索引从0开始。
# 取单个元素
print(s[0])
print(l[0])
# 取多个元素:切片
# 取切片需要三个数字[起点:终点:步长],注意终点是开区间,取出的不包括终点
print(s[2:4:1])
print(l[2:4:1])
# 如果步长是1,那么步长和步长前面的冒号可以省略
print(s[2:4])
print(l[2:4])
# 如果起点是0,也就是从头开始取,那么起点可以省略
# 如果终点是最后一个元素的索引加1(在此处例子里是5),
# 起点和终点之间的冒号不能省略,切片中至少要有一个冒号
# 省略起点
print(s[:4]) # 等价于s[0:4],省略0
print(l[:4]) # 等价于l[0:4],省略0
# 省略终点
print(s[2:]) # 等价于s[2:5],省略5,5就是字符串长度
print(l[2:]) # 等价于s[2:5],省略5,5就是列表长度
# 常用的相关函数len(),获取字符串或列表的长度
print(len(s))
print(len(l))
print(len(l[2:])) # len()函数可以对切片的结果使用
# 步长可以是负数,也就是说可以倒序取出元素
# 步长为负时,起点的数字要比终点的数字大
# 倒序输出
print(s[4:-1:-1]) # 终点为-1错误
print(s[4::-1]) # 如果要取完,可以省略终点
print(s[4::-2]) # 索引每次减2,或者说每两个取一个
# 切片练习
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1.取出所有偶数
print(nums[0::2])
print(nums[0:9:2])
# 2.取出所有奇数
print(nums[1::2])
# 3.倒序输出列表
print(nums[9::-1])
# 4.倒序输出所有偶数
print(nums[8::-2])
# 5.倒序输出所有奇数
print(nums[9:0:-2])
print(nums[9::-2])
# 以上部分为字符串和列表通用
# 字符串分隔函数,需要输入多个数据时使用
s = input() # 输入45 78,则s字符串内容为"45 78 99"
l = s.split() # 空格符,换行符为默认分隔符,可以不填写在参数中,其他符号如“,”要填写在split函数参数中
# 输入45,78,99时
s = input()
l = s.split(",")
# 分割后,返回分隔好的列表
print(l) # ["45", "78", "99"]
# 还可以用分割好的列表给多变量赋值,下面是嵌套简写方法
a, b, c = input().split()
# 以下删除操作字符串不通用,为列表使用的方法
s1 = "hello" # 单引号或双引号包裹的内容是字符串
# 索引 0 1 2 3 4
l1 = ["h", "e", "l", "l", "o"] # 中括号是列表
# del s1[0] # 程序报错
del l1[0] #删除单个元素
print(l1)
del l1[0::2]
print(l1) #删除切片的多个元素
# 注意:每次删除操作后,索引就会发生改变
# 列表成员函数append(),往列表的末尾添加元素
l2 = [] # 建一个空列表
l2.append("a") # .是成员运算符
l2.append("b")
print(l2)
# l2.append("b", "c") # 不能添加多个
# print(l2)
print(l2.pop(0)) # 删除指定的索引处的元素,返回值是被删除的元素
# 返回值是什么?是函数执行的结果值
print(l2.remove("b")) # 删除指定的元素值,没有返回值
# 列表查找:in关键字
nums = [1,2,3,4,5]
print(1 in nums) # 结果为真
print(9 in nums) # 结果为假
# 列表嵌套,也就是二维列表,一般情况最多嵌套到三维列表
# 嵌套一层,二维列表
l3 = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
print(l3[0]) # 打印结果:['a', 'b', 'c']
print(l3[1]) # 打印结果:['d', 'e', 'f']
print(l3[2]) # 打印结果:['g', 'h', 'i']
print(l3[0][0]) # 打印结果:a
# 练习1:取出列表l3中字母d
# 练习2:取出列表l3中字母h
# 字符串比较和数字的比较区别:
if 88 > 100:
print("数字")
if "88" > "100": # 真
print("字符串")
if "88" > "800": # 真
print("字符串")
if "88" > "880": # 假
print("字符串")
#字符串比较是从左往右一位一位的比,找到第一个不相等的地方必出大小结束
# 第九部分: if条件判断和缩进
# 格式1:
'''
if 条件1:
条件1满足时执行的代码1
条件1满足时执行的代码2
条件1满足时执行的代码3
不属于if判断的代码1
不属于if判断的代码2
'''
# 例子1
if 2 == 2:
print("相等") # 条件成立,打印“相等”
# 例子2
if 2 == 3:
print("不相等") # 条件不成立,不会运行
# 格式2:
'''
if 条件1:
条件1满足时执行的代码1
条件1满足时执行的代码2
else: #否则,就是当条件1不成立、或者说条件1为假时执行else分支
条件1不满足时执行的代码1
条件1不满足时执行的代码2
'''
# 例子
a = 2 # 把变量a改为2和3分别试一下
if a == 2:
print("相等")
else:
print("不相等")
# 格式3:
'''
if 条件1:
条件1满足时执行的代码1
elif 条件2:
条件2满足时执行的代码1
elif 条件3:
条件3满足时执行的代码1
else:
条件1、2、3都不成立时执行的代码
'''
# 例子:成绩等级转换
'''
小明想将自己的百分制成绩转换为等级制,请你帮他完成这样的转换。转换规则为:
A,90-100
B,77-89
C,67-76
D,60-66
E,0-59
a = int(input())
if a >= 90 and a <= 100: # 90 <= a <= 100
print("A")
elif a >= 77 and a <= 89:
print("B")
elif a >= 67 and a <= 76:
print("C")
elif a >= 60 and a <= 66:
print("D")
else:
print("E")
'''
# 第十部分: 循环(while/for),也需要注意缩进
# 当不确定循环次数时用while,很清楚循环次数时用for
# while循环格式
'''
while 条件:
循环体
print(1)
'''
a = 1
while a<3:
print("在while循环中")
print(a)
a += 1
print("循环结束")
a = 1
while True:
if a > 2:
break # break的作用是结束循环
print("在while循环中")
print(a)
a += 1
print("循环结束")
a = 0
while True:
a += 1
if a > 4:
break
if a == 2:
continue # 跳过循环体的剩余部分,直接开始下次循环
print(a)
a = 1
while a<3:
print(a)
a += 1
else:
print("else")
# 这里的else不是if语句的否则
# 循环没有break就是正常结束的
# 它的作用是看循环是否正常结束,如果是正常结束的就执行else部分
# 如果break结束的循环,就不执行else部分
a = 1
while a<3:
if a == 2:
break
print(a)
a += 1
else:
print("else")
# 对于for循环,break/continue/else同样适用
# 只有一个参数的时候,就是终点range(0,5,1)
for i in range(5):
print(i)
# 有两个参数时,就是起点和终点。还可以怎么理解:终点减起点等于循环次数
for i in range(1, 5):
print(i)
# 三个参数
for i in range(1, 5, 2):
print(i)
# 只要是有顺序(可迭代)的东西,都可以进行循环
# 1.字符串
s = "abcdef"
for i in s:
print(i)
# 2.列表(直接循环迭代列表)
l = ["a", "b", "c", "d", "e", "f"]
for i in l:
print(i)
# 通过索引获取列表的元素
for i in range(len(l)):
print(i, l[i])
# 第十一部分:海龟画图
import turtle as t # 导入海龟画图模块,并取别名为t
# 1.基础
t.penup() # 抬笔
t.pendown() # 落笔,落笔是默认状态
t.forward(100) # 前进,参数填前进的距离
t.fd(100) # 前进100
t.forward(-100) # 倒着前进100,也是后退
t.backward(100) # 后退100
t.bk(100) # 后退100
t.left(90) # 左转90度
t.right(90) # 右转90度
t.done() # 保持窗口,程序结束时不自动关闭画图窗口
# 画正多边形,n设置边数
n = 3
for i in range(n):
t.forward(100)
t.left(360/n)
# 画五角星方法1
for i in range(5):
t.forward(100)
t.left(144)
# 画五角星方法2
for i in range(5):
t.forward(50)
t.right(72)
t.forward(50)
t.left(144)
# 2.颜色相关,常用颜色:"red","blue","green","yellow"
t.pencolor("red") # 画笔颜色设为红色
t.bgcolor("blue") # 背景颜色设为蓝色
t.fillcolor("green") # 填充颜色设为绿色
# 和填空颜色一起用
t.begin_fill() # 开始填充
t.end_fill() # 结束填充
# 填充颜色的例子,先设置填充颜色,然后开始填充,画图形,结束填充
t.fillcolor("yellow") # 填充颜色设为黄色
t.begin_fill()
# 画五角星
for i in range(5):
t.forward(50)
t.right(72)
t.forward(50)
t.left(144)
t.end_fill()
t.done()
# 3.补充:画笔粗细,速度,画点
t.pensize(5) # 默认粗细为1
t.speed(0) # 0最快,1-10数字越大越快
t.hideturtle() # 隐藏海龟
# 画点
t.dot(100) # 一个参数时:画直径100的点,默认颜色黑色
t.dot(100,"red") # 两个参数时:画直径100的点,颜色红色
# 4.画圆,三个参数半径、角度、步数,角度默认为360
# 只填一个参数时为半径,填两个参数时为半径和角度
t.circle(100) # 逆时针画一个半径100的圆
t.circle(-100) # 顺时针画一个半径100的圆
t.circle(100,90) # 转90度画四分之一圆
t.circle(100,360,3) # 等同于画正多边形,100不是边长
t.circle(100, steps=6) # 等同于画正多边形,100不是边长
# 5.设置相关
t.setup(600, 400) # 设置窗口大小,第一个参数是宽度,第二个参数是高度
t.setx(100) # 设置画笔x坐标为100
t.sety(100) # 设置画笔y坐标为100
t.goto(100, 200) # 设置画笔坐标为x100y200
t.setheading(90) # 设置画笔方向
# 第十二部分:字典 1.创建字典 2.获取字典元素 3.修改字典 4.删除字典 5.遍历字典 6.字典查找
# 1.创建字典
d = {}
print(type(d))
# 存储形式为键值对(key/value,k/v),键不能重复
d = {"小明":12, "小白":13, "小黑":14}
print(d)
# 键的数据只能使用不可修改的数据类型:数字、字符串、元组
d = {1:12}
d = {"1":12}
d = {(1,2,3):12}
#d = {[1,2,3]:12} # 报错,列表是可修改数据类型
# 2.获取字典元素
d = {"小明":12, "小白":13, "小黑":14}
print(d["小明"])
# 获取不存在的键会报错
# print(d["小紫"])
# 安全获取字典元素的方法get()函数,如果获取的是不存在的键,那么返回None值
print(d.get("小紫"))
# 3.修改字典
d = {"小明":12, "小白":13, "小黑":14}
# 修改已存在键的值
d["小明"] = 11
print(d)
# 添加新的键值对
d["小蓝"] = 15
print(d)
# 4.删除字典
# 删除单个元素
del d["小明"]
print(d)
# 清空字典
d.clear()
print(d)
# 删除整个字典
del d
# print(d) # 删除后字典不存在,获取会报错
# 5.遍历字典
d = {"小明":[100,100,100], "小白":[99,99,99], "小黑":[98,98,98], "小蓝":[97,97,97]}
for k in d:
print(k, d[k])
for k,v in d.items():
print(k, v)
# 字典查找
print("小明" in d)
print("小月" in d)
if "小明" in d: # in查找也可以用在列表中
print("字典中有小明")
else:
print("字典中没有小明")
# 练习1
d = {"小明":12, "小白":13, "小黑":14}
# 1.修改小白年龄为15
# 2.删除小黑数据
# 3.增加一个小蓝年龄为16
# 4.计算字典中所有人的平均年龄
# 练习2(科目顺序为语文、数学、英语)
d = {"小明":[100,100,100], "小白":[99,99,99], "小黑":[98,98,98], "小蓝":[97,97,97]}
# 1.修改小明数学为95分
# 2.增加一个小红的数据语文100、数学99、英语98
# 计算所有人的英语平均分