python学习第一周总结
一、Markdown语法
Markdown是一种轻量级标记语言,排版语法简洁,它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。基于Markdown的优势,本周学习Markdown语法的基本用法对以后的学习生活尤为重要。
二、Python基础语法
-
注释:代码中不会被编译成机器码的部分,即不影响程序功能的部分
单行注释:在一行内容前加
#
或者ctrl+/
多行注释:将注释内容放在三个单(双)引号内
注释的作用:
a. 对代码进行注解和说明,增加代码的可读性
b. 取消有效代码的功能
-
标识符 - Python命名要求
标识符要求:由字母、数字、下划线组成,数字不能开头
但,例如
n*m = 1
,2n = 2
此时系统会报错。 -
关键字不能用来命名
本身具有特殊意义或者特殊功能的标识符,即关键字。
# 输出所有的关键字 from keyword import kwlist print(kwlist) # ['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
-
行和缩进
一条语句占一行,一行结束后不需要分号;
一行的开头不能随意添加缩进(空格) - 默认情况下所有的代码都需要顶格写。
-
基本数据类型
数字:用来表示数值大小的数据
对应类型:
int
(整型)、float
(浮点型)文本:用来表示文字信息的数据,例:姓名、性别、所属地电话号码、身份证号码等等。
对应类型:
str
(字符串)布尔:只有
True
和False
两个结果,True
表示(真)肯定的回答,False
表示(假)否定的回答对应类型:
bool
(布尔)空值:
None
(表示空/没有) -
获取数据类型: 使用
type()
函数 -
类型转换:
int(数据)、float(数据)、str(数据)、bool(数据)
注意:浮点类字符串不可直接转换为整型
-
print
函数print(数据) print(数据1, 数据2, ...) print(数据1, 数据2, ..., end=字符串) print(数据1, 数据2, ..., sep=字符串)
三、变量
-
变量的作用
变量是用来保存数据的。(将变量保存到变量中以后,就可以通过使用变量来实验数据)
数据保存到变量中以后再来使用数据可以让数据的意义更明确
在需要数据的时候先将数据保存到变量中,再通过使用变量来使用数据
使用数据的建议 :每次在使用数据的时候,先用变量将数据存起来,然后再通过使用变量来使用数据。
-
定义变量(创建变量保存数据)
''' 语法: 变量名 = 数据 说明: a.变量名 - 由程序员自己命名 2个要求:标识符;不是关键字 3个规范:见名知义(看到变量名就知道变量中保存的是什么数据);不使用系统的函数名(print)、类名(int\float\str)或者模块名;所有的字母都小写,多个单词用下划线隔开。 # pet_name = '小黑' b. = - 赋值符号;固定写法 c. 数据 - 可以是任何有结果的表达式(包括:具体的数据、运算表达式、...) '''
-
使用变量(必须是已定义的变量) - 打印、赋值、运算
使用变量是指使用变量中保存的数据。
num = 10 print(num) # 10 num1 = num print(num1 + 20) # 30 print(num2) # NameError: name 'num2' is not defined
-
重新给变量赋值 - 给已定义过的变量重新赋值(修改变量的值)
a = 12 print(a) # 12 a = 23 print(a) # 23 a = 'hello' print(a) # hello
Ps:重新赋值时可以赋予不同类型的数据。
-
同时定义多个变量
a. 同时定义多个变量赋相同的值:
变量1 = 变量2 = 变量3 = ... = 数据
x = y = z = 1
b. 同时定义多个变量赋不同的值:
变量1, 变量2, 变量3, ... = 数据1, 数据2, 数据3, ...
m,n = 1,2
例题:交换两个变量的值
a = 100 b = 200 b,a = a,b # b,a = 200,100 print(a,b) # 200 100
四、运算符
-
数学运算
Python中数学运算符: +、-、*、/、%(取余-求余数)、//(整除,向下取整)、**(幂运算)
应用
# 判断整除关系 print(10 % 5) print(8 % 2) print(15 % 3) # 判断数字的奇偶性 num = 67 print(num % 2) # 取整除的低位数(砍掉高位保留低位) num = 345 print(num % 10) print(num % 100) # 去掉整数的低位数,保留高位数 - 对10的n次方整除 num = 9876 print(num // 10) print(num // 100) print(num // 1000)
练习
# 练习1: 获取num中的十位数 num = 782 print(num % 100 // 10) print(num // 10 % 10) # 练习2: 获取num中的百位数 num = 82349 print(num % 1000 // 100) print(num // 100 % 10)
-
比较运算
比较运算符: >、<、>=、<=、==、!=(不等于)
所有的比较运算符的运算结果都是布尔值 : True/False
Python中的比较运算符支持连写表示范围
练习
# 写出判断score是否在[70, 90)范围内 score = int(input('请输入分数:')) print(70 <= score < 90)
-
逻辑运算
逻辑运算符: and(逻辑与)、or(逻辑或)、not(逻辑非)
复合条件 - 将多个条件连接成一个条件的连接方法:
a.要求多个条件同时成立 b.要求多个条件中只要有一个条件成立就行
and
''' 1)应用场景: 要求多个条件同时成立的时候 2)运算规则: 条件1 and 条件2 - 两个条件都成立结果就是True,只要有一个不成立就是False True and True True True and False False '''
or
''' 1)应用场景: 要求多个条件中只有一个成立就行 2)运算规则: 条件1 or 条件2 '''
not
''' 1)应用场景: 对条件进行否定 2)运算规则: not 条件 - 对指定条件进行否定 '''
案例
# 案例1:写出判断num是否能够同时被3和5整除的条件 num = 78 print('num是否能够同时被3和5整除:', num % 3 == 0 and num % 5 == 0) print('num是否能够同时被3和5整除:', num % 15 == 0) # 案例2:写出判断num是否是大于10的偶数的条件 num = 78 print('num是否是大于10的偶数:', num > 10 and num % 2 == 0) # 案例3:写出判断num是否是能被5整除的奇数 num = 15 print('num是否是能被5整除的奇数:', num % 5 == 0 and num % 2 != 0) # 案例4: 判断num是否能被3或者7整除 num = 34 print('num是否能被3或者7整除', num % 3 == 0 or num % 7 == 0) # 案例5:判断year对应的年份是否是闰年 year = 2000 print('否是闰年:', (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)) # 案例6: 写出age不大于18的条件 age = 72 print(not age > 18) print(age <= 18) # 案例7: num不等于10的条件 num = 23 print(not num == 10) print(num != 10) # 案例8:写出判断num是否不能同时被3和7整除的条件 num = 23 print(not (num % 3 == 0 and num % 7 == 0))
-
赋值运算
赋值运算符: =、+=、-=、*=、/=、%=、//=、**=
不管是简单的赋值运算符还是复合赋值运算符,其功能都是给变量赋值
注意: 所有赋值运算符的左边必须是变量,右边必须是能够提供数据的表达式
-
运算符优先级
数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)
五、控制流程语句
-
流程控制 - 控制代码的执行顺序
根据代码执行过程的不同,可以将代码分为三种结构:
- 顺序结构(默认):代码从上往下按顺序执行,每条语句只执行一次。
- 分支结构:根据条件选择分支代码进行执行 - if语句
- 循环结构:代码重复执行 -
for``````while
循环
-
分支结构
if单分支结构
''' 语法: if 条件语句: 代码段 说明: if - 固定写法 条件语句 - 任何有结果的表达式,一般是结果为布尔值的表达式 : - 固定写法 代码段 - 结构上,和if保持一个缩进(一个tab)的一条或者多条语句(至少一条) 逻辑上,就是满足条件才需要执行的代码 '''
if双分支结构
''' 语法: if 条件语句: 代码段1(满足条件会执行的代码) else: 代码段2(条件不成立会执行的代码) '''
if多分支结构
''' 方法1: if 条件1: 代码段1 if 条件2: 代码段2 if 条件3: 代码段3 ... (每个条件都会判断) 方法2: if 条件1: 代码段1 elif 条件2: 代码段2 elif 条件3: 代码段3 ... else: 代码段N (从前往后判断条件,执行第一个满足条件对应的代码段,一旦某个条件成立,后面的条件不会再执行) '''
案例
# 案例1: 根据num的值打印'偶数'(如果num的值是偶数就打印'偶数') num = 35 if num % 2 == 0: print('偶数') else: print('奇数') # 案例2:根据num的值打印'3的倍数' num = 78 if num % 3 == 0: print('3的倍数') # 案例3:如果year对应的年份是闰年就打印'闰年' year = 1998 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print('闰年') # 案例4:若x是整数就打印'整数' x = 34.9 if type(x) == int: print('整数') # 案例5: 跟据num的值打印'偶数'或者'奇数' num = 24 if num % 2 == 0: print('偶数') else: print('奇数') # 案例6:根据year的值打印'闰年'或者'平年' year = 2100 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print('闰年') else: print('平年') # 案例7: 打印指定的百分制分数对应的等级: >=90 - A; [80, 90) - B score = 19 if score >= 90: print('A') if 80 <= score < 90: print('B') if 60 <= score < 80: print('C') if score < 60: print('D') score = 78 if score >= 90: print('A') elif score >= 80: print('B') elif score >= 60: print('C') else: print('D')
-
循环结构
for循环
''' for 循环变量 in range(start, end): 语句1 语句2 语句3 range(100) - 0~99的取值范围 range(0, 100) - 0~99的取值范围 range(1, 101) - 1~100的取值范围 '''
while循环
''' while 条件语句: 循环体 '''
案例
# 案例1 for i in range(1, 10, 3): print('*' * i) # 案例2:输出1-9的数字以及他们的平方和立方 for x in range(1, 10): print(x, x ** 2, x ** 3) for x in range(1, 10): print('%d\t%d\t%d' % (x, x ** 2, x ** 3)) for x in range(1, 10): print(f'{x}\t{x ** 2}\t{x ** 3}') # 案例3:1-100求和 total = 0 for i in range(1, 101): total += i print(total) # 案例4:奇数和 total = 0 for i in range(1, 101, 2): total += i print(total) # 案例5:偶数和 total = 0 for i in range(2, 101, 2): total += i print(total) # 案例6:找出100-999之间的水仙花数 for x in range(100, 1000): a = x // 100 b = x // 10 % 10 c = x % 10 if (a ** 3 + b ** 3 + c ** 3 == x): print(x) # 案例7:输入一个大于1的正整数,判断它是不是质数 # num = int(input('num = ')) # # 假设输入的num是一个质数将布尔值赋值为True # is_prime = True # for i in range(2, num): # # 如果在2~N-1之间找到了num的因子 # if num % i == 0: # # 不是质数就将对应的布尔值赋值为False # is_prime = False # break # # if is_prime: # print(f'{num}是质数.') # else: # print(f'{num}不是质数.') for num in range(2, 100): is_prime = True for i in range(2, num): if num % i == 0: is_prime = False break if is_prime: print(num) # 案例8:猜数字小游戏 import random answer = random.randrange(1, 101) counter = 0 while True: counter += 1 thy_answer = int(input('请输入: ')) if thy_answer > answer: print('小一点') elif thy_answer < answer: print('大一点') else: print('恭喜你,猜中了!') break if counter > 7: print('温馨提示: 智商余额不足!!!') print('游戏结束') # 案例9:求最大公约数和最小公倍数 # for i in range(1, 10): # for j in range(1, i+1): # print(f'{i} * {j} = {i * j}', end='\t') # print() # x = int(input('x = ')) y = int(input('y = ')) # # z = x if x <= y else y # # for i in range(z, 0, -1): # if x % i == 0 and y % i == 0: # print(f'{x}和{y}的最大公约数是: {i}') # print(f'{x}和{y}的最小公倍数是: {x * y // i}') # break a, b = x, y while b % a != 0: a, b = b % a, a print(f'{x}和{y}的最大公约数是: {a}') print(f'{x}和{y}的最小公倍数是: {x * y // a}') # 案例10:求平均值(10个数) total = 0 for _ in range(10): total += float(input()) print(f'平均值: {total / 10:.2f}') # 案例11:求排列数和组合数 from math import factorial as f n = int(input('n = ')) k = int(input('k = ')) fn = 1 for i in range(2, n + 1): fn *= i fm = 1 for i in range(2, n - k + 1): fm *= i print(f'p({n},{k}) = {fn // fm}') fk = 1 for i in range(2, k + 1): fk *= i print(f'c({n},{k}) = {fn // fk // fm}') n = int(input('n = ')) k = int(input('k = ')) print(f'p({n},{k}) = {f(n) // f(n - k)}') print(f'c({n},{k}) = {f(n) // f(k) // f(n - k)}') # 案例12:判断三个数是否能构成三角形 a = float(input()) b = float(input()) c = float(input()) if a + b > c and b : p = a + b + c h = p / 2 s = (h * (h - a) * (h - b) * (h - c)) ** 0.5 print(f'三角形的周长: {p}') print(f'三角形的面积: {s}') else: print('无效输入: 无法构成三角形') # 案例14:百钱百鸡问题 for x in range(21): for y in range(34): for z in range(0, 100, 3): if x + y + z == 100 and 5 * x + 3 * y + z // 3 == 100: print(x, y, z) for x in range(21): for y in range(34): z = 100 - x - y if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100: print(x, y, z)
for 和 while 的选择问题
''' 循环问题优先考虑for循环,for循环解决不了才使用while循环 ''' for 的应用场景:循环次数确定 while 的应用场景:循环次数不确定(写代码的时候程序员无法知道循环的次数)
-
break
关键字break 的作用:结束整个循环(执行循环体的时候如果遇到
break
,循环直接结束)for i in range(10): if i > 2: break print('hello')
while 遇到 break
''' # while True 是个恒成立的循环,若后面没有break则会陷入死循环 while True: 需要重复执行的操作 if 循环结束条件: break '''
-
练习
# 五人分鱼问题 f = 6 while True: total = f is_total = True for _ in range(5): if (total - 1) % 5 == 0: total = (total - 1) // 5 * 4 else: is_total = False break if is_total: break f += 5 print(f'总共至少有{f}条鱼') # 掷骰子(10000次)统计每个点数出现的次数和频率 face3 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] while True: for i in range(10000): face1 = random.randint(1, 6) face2 = random.randint(1, 6) face3[face1 + face2] +=1 for i in range(len(face3)): rate = face3[i]/10000 print(f'点数{i}共出现了{face3[i]}次') print(f'出现的概率{rate:.2%}') break # 找出一万以内的完美数(一个数=除自身以外所有因子的和) def num(i): x = 0 for j in range(1, i): if i % j ==0: x += j else: continue if x == i: print(i) for i in range(1, 10001): num(i) for num in range(2, 10000): total = 1 for i in range(2, int(num ** 0.5) + 1): if num % i == 0: total += i if i != num // i: total += num // i if total == num: print(num) # 输入三角形三条边的长度,先判断能否构成三角形,如果能则计算三角形的周长和面积 a = int(input("请输入一个整数:")) b = int(input("请输入一个整数:")) c = int(input("请输入一个整数:")) if a + b > c and b + c > a and c + a > b: C = a + b + c x = C / 2 S = pow(x * (x - a) * (x - b) * (x - c), 0.5) print(f'三角形的周长为{C}, 面积为{S}') else: print('不能构成三角形') # 输入两个正整数,求它们的最大公约数和最小公倍数 num1 = int(input('请输入一个数:')) num2 = int(input('请输入一个数:')) x = 0 for i in range(1, num1+1): for j in range(1, num2+1): if num1 % i == 0 and num2 % j ==0 and i == j: if x < i: x = i continue print(f'最大公约数为{x}') if num1 < num2: num1, num2 = num2, num1 y = num1 while y > 0: if y % num1 == 0 and y % num2 == 0: print(f'最小公倍数为{y}') break y += 1 # 输出100以内的质数 for num in range(100): is_prime = True for i in range(2, num): # 如果在2~N-1之间找到了num的因子 if num % i == 0: # 不是素数就将对应的布尔值赋值为False is_prime = False break if is_prime: print(num)
六、本周总结
- 跟着老师的节奏,学习了Python的基本语法、python的运算符和控制流程语句,为后期的学习奠定了一定的基础,期待下周对于常见容器型数据类型和函数的学习。