Python学习笔记(2)
- 第5节课 进制转换
- 5.1 十进制与二进制互转
- 5.2 十进制与八进制互转
- 5.3 十进制与十六进制互转
- 5.4 N进制与M进制互转
- 5.5 进制转换内置函数
- 第6节课 输入输出函数
- 6.1 print()函数详解
- 6.2 input()函数详解
- 6.3 初识异常处理
- 第7节课 基本运算
- 7.1 算数运算符
- 7.2 位运算符
- 7.3 赋值运算符
- 第8节课 【基础语法编程练习】
- 程序员的自我修养
- 练习01 摄氏温度转化为华氏温度
- 练习02 计算圆柱体的体积
- 练习03 对一个整数中的各位数字求和
- 练习04 计算三角形的面积
- 练习05 显示当前时间
- 练习06 最小数量的硬币
第5节课 进制转换
5.1 十进制与二进制互转
(1)十进制 转 二进制
将131转二进制
131 ÷ 2 = 65 mod 1
65 ÷ 2 = 32 mod 1
32 ÷ 2 = 16 mod 0
16 ÷ 2 = 8 mod 0
8 ÷ 2 = 4 mod 0
4 ÷ 2 = 2 mod 0
2 ÷ 2 = 1 mod 0
1 ÷ 2 = 0 mod 1
二进制为 10000011
(2)二进制 转 十进制
将 10000011 转 十进制
1 × 20 + 1 × 21 + 0 × 22 + 0 × 23 + 0 × 24 + 0 × 25 + 0 × 26 + 1 × 27
1 + 2 + 128 = 131
(3)二进制特点规律
二进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
10 | 2 |
11 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
1000 | 8 |
1010 | 2 + 8 = 10 |
一个二进制为 为bit 比特 表示两种数据 0 、1
8个bit 的二进制 10101101 为 1字节 byte (1b)
1kb = 1024b
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
5.2 十进制与八进制互转
(1)十进制 转 八进制
将 131 转 八进制
131 ÷ 8 = 16 mod 3
16 ÷ 8 = 2 mod 0
2 ÷ 8 = 0 mod 2
八进制为 203
(2)八进制 转 十进制
将八进制 203 转十进制
3 × 80 + 0 × 81 + 2 × 82
3 + 128 = 131
十进制 131
5.3 十进制与十六进制互转
0~9 A~F
(1)十进制 转 十六进制
444 ÷ 16 = 27 mod 12 (C)
27 ÷ 16 = 1 mod 11 (B)
1 ÷ 16 = 0 mod 1
十六进制为 1BC
(2)十六进制 转 十进制
十六进制的 1BC 转 十进制
12 × 160 + 11 × 161 + 1 × 162
12 + 176 + 256 = 444
十进制为 444
5.4 N进制与M进制互转
(1)通用思路
有一个 五进制 1024 转 七进制 以十进制为桥梁
五进制 转 十进制
4 × 50 + 2 × 51 + 0 × 52 + 1 × 53
4 + 10 + 125 = 139
十进制 转 七进制
139 ÷ 7 = 19 mod 6
19 ÷ 7 = 2 mod 5
2 ÷ 7 = 0 mod 2
七进制为 256
(2)特殊情况
如果是二进制、四进制、八进制、十六进制 之间相互转换的化
二进制 10101101 转 四进制 10-10-11-01 = 2231 反之亦然
二进制 10101101 转 八进制 010-101-101 = 255 反之亦然
二进制 10101101 转 十六进制 1010-1101 = AD 反之亦然
5.5 进制转换内置函数
(1)bin()函数
转二进制
num = 10
print(bin(num))
# 0b1010 字符串形式
(2)oct()函数
转八进制
num = 10
print(oct(num))
# 0o12 字符串形式
(3)hex()函数
转十六进制
num = 10
print(hex(num))
# 0xa 字符串形式
第6节课 输入输出函数
6.1 print()函数详解
(1)基本用法
print() 函数主要用于将数据对象打印到控制台(默认,后续也可以将数据对象打印到文件中)
函数的原型:
print(*objects, sep = " ", end = "\n", file = sys.stdout, flush = False)
- *objects:就是要打印的数据对象,
*
可以存在打印多种数据对象 - sep = " ":指的就是数据之间的分隔符,默认为空格
- end = “\n”:指的是打印完数据之后,以那个字符串为结尾,默认为"\n" 换行
- file = sys.stdout:输出的文件,默认为控制台,了解即可
- flush = False : 是否强制刷新输出缓冲区,默认是 False,了解即可
print("Hello", "Python", "World", 123, 3.14)
# 输出:Hello Python World 123 3.14
print("Hello", "Python", "World", sep = "#")
# 输出:Hello#Python#World
print("Hello", "Python", "World", sep = "#", end = "妙妙屋")
print("Hello", "Python", "World", sep = "#", end = "米老鼠")
# 输出:Hello#Python#World妙妙屋Hello#Python#World米老鼠
(2)格式化输出
主要负责将变量和字符串进行拼接进行输出,同时也可以进行对齐、截取小数点等操作
旧式字符串格式化,它和C语言当中的输出很像 printf("有一个数字为:%d",num)
name = "张三"
age = 30
height = 1.8578901
print("我叫 %s,今年 %d 岁,身高 %.2f 米" % (name, age, height))
新式字符串格式化,使用 {}
作为占位符,通过format()
函数传入参数
name = "张三"
age = 30
height = 1.8578901
# {:.2} 存在四舍五入
# 位置参数
print("我叫 {} ,今年 {} 岁,身高 {:.2} 米".format(name, age, height))
# 关键字参数
print("我叫 {name} ,今年 {age} 岁,身高 {height:.2} 米".format(name = "李四", age = 18, height = 1.2789))
print("我叫 {name} ,今年 {age} 岁,身高 {height:.2} 米".format(name = name, age = age, height = height))
# 索引参数
print("我叫 {1} ,今年 {2} 岁, 身高 {0:.2f} 米".format(height, name, age))
f-字符串,就是在字符串之前加一个f 或 F,在 {}
中直接使用变量名即可
name = "张三"
age = 30
height = 1.8578901
print(f"我叫{name},今年{age}岁,身高{height:.2f}米")# 对齐操作
fruit = "banana"
print(f"【{fruit:10}】") # 左对齐 宽度为10
print(f"【{fruit:>10}】")# 右对齐 宽度为10
print(f"【{fruit:^10}】")# 居中 宽度为10
6.2 input()函数详解
(1)基本用法
input()
函数的基本功能就是暂停程序的运行,等待用户输入一行数据,然后将用户输入的内容 作为字符串返回,意味着所有的输入内容 均为 字符串!
num = input()
# input(提示信息)
num = input("请输入一个数字:")
num = int(num)
print(type(num))# 可以一句话解决
num = int(input("请输入一个数字:"))
需要注意的是,输入的是字符串,后续该得需要将字符串转为所需要的数据类型
(2)多值输入处理
多值输入的第一个解法,一个一个输入
num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))
print(num1 + num2)
多值输入都在同行,得进行分割,用的是split(分割符)函数
# "1,2,3" => ["1" ,"2" ,"3"] => 数组
# 比较灵活 可以任意匹配分隔符
num1, num2, num3 = input("请输入三个数字:").split("#")
num1 = int(num1)
num2 = int(num2)
num3 = int(num3)
print(num1 + num2 + num3)
目前为止,每个数据都要进行转换,比较麻烦,可以使用 map()函数来进行统一的操作
num1, num2, num3 = map(int, input("请输入三个数字:").split(" "))
print(num1 + num2 + num3)
# map的含义是 把分割好的字符串们,统一进行 int 操作
(3)eval()函数(谨慎使用)
eval()
函数可以将字符串作为Python表达式进行求值。结合input()
函数使用,可以达到多值输入的目的。
# eval 可以将字符串转为Python代码 并执行了
num = eval("1 + 2 + 3")
print(num)
eval("print('hello world!')")# 输入的数据只能以英文的逗号 , 做分隔符
a, b, c = eval(input("请输入三个数字:"))
print(a + b + c)
为甚谨慎使用,因为它可以执行代码
# 输入 exit()
a, b, c = eval(input("请输入三个数字:"))
print(a + b + c)
6.3 初识异常处理
(1)异常概念
所谓的异常,就是在代码的编译期间和运行期间出现的一些错误,会导致程序终止运行。
异常处理的目的就是提前捕获可能出现的问题,再提供一些备选的方案,尽量让程序正常运行。
(2)try-except 语句
# 尝试 将可能出现问题的代码 写到 try语句中
try:num1 = int(input("请输入一个数字:"))num2 = int(input("请输入一个数字:"))print(num1 / num2)
# 捕获异常 可以针对不同的问题来进行不同的处理
except ValueError: print("输入数据错误")
except ZeroDivisionError:print("分母不能为0")
前期为了方便使用,可以不用捕获具体的异常错误
# 尝试 将可能出现问题的代码 写到 try语句中
try:num1 = int(input("请输入一个数字:"))num2 = int(input("请输入一个数字:"))print(num1 / num2)
# 捕获异常 可以针对不同的问题来进行不同的处理
except:print("输入数据错误")
(3)try-except-else 语句
try:num1 = int(input("请输入一个数字:"))num2 = int(input("请输入一个数字:"))print(num1 / num2)
except:print("输入数据错误")
else:print("没有发生异常,执行else的内容")
(4)try-except-finally 语句
try:num1 = int(input("请输入一个数字:"))num2 = int(input("请输入一个数字:"))print(num1 / num2)
# except 和 else 其实互斥的
except:print("输入数据错误")
else:print("没有异常,执行else")
# 绝对执行的
finally:# 一般是用于关闭资源、进程、其他占用内存的代码的print("不管有没有发生异常,都执行finally的内容")
第7节课 基本运算
7.1 算数运算符
(1)加法运算符 +
- 如果是对两个数值类型进行加法,数学加法
- 如果是对两个序列类型进行加法,拼接
num1 = 3
num2 = 4
print(num1 + num2)
s1 = "Hello"
s2 = "迪丽热巴"
print(s1 + s2) # 拼接
print(num1 + s2) # TypeError: unsupported operand type(s) for +: 'int' and 'str'
(2)减法运算符 -
- 如果是对两个数值类型进行减法,数学减法
- 如果是对两个集合进行减法,求差集
num1 = 3
num2 = 4
print(num1 - num2)
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 差集 set1中存在但set2中不存在的数据
print(set1 - set2)
print(set2 - set1)
(3)乘法运算符 *
- 如果是对两个数值类型进行乘法,数学乘法
- 如果是序列和数值类型,重复
num1 = 3
num2 = 4
print(num1 * num2)
s = "Hello"
print(s * 5)
print(s * s) # TypeError: can't multiply sequence by non-int of type 'str'
**(4)除法运算符 /
与 //
**
/
:除法运算,结果为小数//
:除法运算,结果为整数,商;如果存在小数,结果为整小数
print(3 / 2)
print(4 / 2)
print(3 // 2)
print(4 // 2)
print(4.0 // 2)
print(4 // 2.0)
print(4.2 // 2.2)
(5)取余运算符 %
就是求余数
print(10 % 3)
print(9 % 3)
(6)幂运算符 **
print(2 ** 3) # 2^3
print(16 ** 0.5) # 16开平方
注意,注意,注意
Python当中 不存在 ++ –
int i = 1;
i++;
7.2 位运算符
主要用于对整数进行二进制的运算
(1)按位与运算符 &
两个整数,对二进制为进行 与 运算;全真则真,有假则假
print(13 & 6)
"""
1101
0110 &
0100 = 4
"""
(2)按位或运算符 |
两个整数,对二进制为进行 或 运算;全假则假,有真则真
print(13 | 6)
"""
1101
0110 |
1111 = 15
"""
(3)按位异或运算符 ^
两个整数,对二进制为进行 异或 运算;相同为假,不同为真
print(13 ^ 6)
"""
1101
0110 ^
1011 = 11
"""
(4)按位取反运算符 ~
将二进制1变0,0变1。在Python中,整数是有符号的,结果 -(x + 1)
num = 13
"""
01101
~
10010 -16 + 2 = -14
"""
num = 21
print(bin(21))
"""
010101
~
101010 -32 + 8 + 2 = -22
"""
print(~num) # -22
(5)左移运算符 <<
就是给二进制右边加若干个0
num = 3
"""
11
<< 3
11000
"""
print(num << 3) # num * 2 ** 3
(6)右移运算符 >>
就是给二进制右边去掉若干个bit
num = 37
print(bin(num))
"""
100101
>> 3
100
"""
print(num >> 3) # num / (2 ** 3)
位运算的的主要应用场景:
(1)乘除:以2的次幂为目标
(2)图形计算:矩阵计算
(3)Linux权限
7.3 赋值运算符
n += 1 # n++n -= 1 # n--
(1)加法赋值运算符 +=
将变量的值加上右侧表达式的值,然后将结果重新赋给该变量。
num = 10
num += 4 # num = num + 4
print(num)
(2)减法赋值运算符 -=
将变量的值减去右侧表达式的值,然后将结果重新赋给该变量。
num = 10
num -= 4
print(num)
(3)乘法赋值运算符 *=
将变量的值乘以右侧表达式的值,然后将结果重新赋给该变量。对于字符串、列表等可迭代对象则是进行重复操作。
# 数字相乘
num = 6
num *= 2
print(num) # 字符串重复
str1 = "abc"
str1 *= 3
print(str1)
(4) 除法赋值运算符 /=
将变量的值除以右侧表达式的值,然后将结果(浮点数)重新赋给该变量。
num = 15
num /= 3
print(num)
(5)整除赋值运算符 //=
将变量的值除以右侧表达式的值,取整后将结果重新赋给该变量。
num = 15
num //= 4
print(num)
(6)取模赋值运算符 %=
将变量的值除以右侧表达式的值,取余数后将结果重新赋给该变量。
num = 15
num %= 4
print(num)
(7)幂赋值运算符 **=
将变量的值进行右侧表达式指定次幂的运算,然后将结果重新赋给该变量。
num = 2
num **= 3
print(num)
(8)按位与赋值运算符 &=
对变量和右侧表达式的值进行按位与运算,然后将结果重新赋给该变量。
a = 5 # 二进制: 0101
b = 3 # 二进制: 0011
a &= b
print(a) # 二进制: 0001,十进制: 1
(9)按位或赋值运算符 |=
对变量和右侧表达式的值进行按位或运算,然后将结果重新赋给该变量。
a = 5 # 二进制: 0101
b = 3 # 二进制: 0011
a |= b
print(a) # 二进制: 0111,十进制: 7
(10)按位异或赋值运算符 ^=
对变量和右侧表达式的值进行按位异或运算,然后将结果重新赋给该变量。
a = 5 # 二进制: 0101
b = 3 # 二进制: 0011
a ^= b
print(a) # 二进制: 0110,十进制: 6
(11)左移赋值运算符 <<=
将变量的值向左移动右侧表达式指定的位数,然后将结果重新赋给该变量。
num = 2 # 二进制: 0010
num <<= 2
print(num) # 二进制: 1000,十进制: 8
(12)右移赋值运算符 >>=
将变量的值向右移动右侧表达式指定的位数,然后将结果重新赋给该变量。
num = 8 # 二进制: 1000
num >>= 2
print(num) # 二进制: 0010,十进制: 2
第8节课 【基础语法编程练习】
程序员的自我修养
(1)遇到一个编程问题,一定要仔细阅读题目,找出关键的数据和具体的操作流程。
(2)一定要先分析题目的求解过程,千万不要直接上来写代码开干。
(3)必须写注释,将求解的过程以注释的形式先列出来。
Python当中有单行注释,主要以#
开头,直到换行为止都为注释内容
# 这是一个注释内容
num = 3 # 定义一个变量 存储 整数 3
Python中其实没有对于多行注释的定义,但是我们可以使用三引号字符串的形式充当多行注释。
也可以看做是文档说明
"""
这是一个多行注释(文档说明 代码的说明书)
定义一个变量num存储整数3
打印这个变量
"""
num = 3
print(num)
# 提取文档注释中的内容
print(__doc__)
(4)对变量、函数、类起名时,一定要有意义,最好用英文单词、英文简写来表示,实在不行就拼音
(5)编码规范
- 遇到运算符的时候,记得给运算符的两边加空格
- 在序列或者多数据情况下,会用逗号
,
进行分割,逗号后面也加空格 - 由于Python中不用
{}
表示层级,而是用缩进来表示,所以一定要注意代码的从属问题,缩进最好用tab
键去写,不要用空格
练习01 摄氏温度转化为华氏温度
题目描述
输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出
转换的公式为如下:
f a h r e n h e i t = ( 9 / 5 ) ∗ c e l s i u s + 32 fahrenheit=(9/5)*celsius+32 fahrenheit=(9/5)∗celsius+32
输入输出描述
输入一个值表示摄氏温度celsius
输出华氏温度fahrenheit ,结果保留一位小数点
示例
输入:
43
输出:
109.4
"""
数据:cel 摄氏度 fah 华氏度
操作:
1. 输入 cel
2. 根据提供的公式 计算 fah
3. 输出fah 保留一位小数点
"""
cel = float(input())
fah = (9 / 5) * cel + 32
print(f'{fah:.1f}')
练习02 计算圆柱体的体积
题目描述
输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。
a r e a = r a d i u s ∗ r a d i u s ∗ π area=radius*radius*π area=radius∗radius∗π
v o l u m e = a r e a ∗ l e n g t h volume=area*length volume=area∗length
输入输出描述
分别输入圆柱的半径radius和高度length,两个数据之间用空格分隔
输出两行,第一行为圆柱底面积area,第二行为圆柱体积volume,结果保留两位小数点
示例
输入:
5.5 12
输出:
95.03
1140.41
import math
# 1.输入半径和高
radius, length = map(float, input().split(" "))
# 2.计算底面积
area = math.pi * radius ** 2
# 3.计算体积
volume = area * length
# 4.输出底面积和体积
print(f'{area:.2f}')
print(f'{volume:.2f}')
练习03 对一个整数中的各位数字求和
题目描述
读取一个0到1000之间的整数,并计算它各位数字之和
输入输出描述
输入一个(0,1000)之间的整数
输出该数字的各位数字之和
示例1
输入:
999
输出:
27
解释:
999各位数之和为9 + 9 + 9 = 27
示例2
输入:
12
输出:
3
"""
123 % 10 = 3
12 % 10 = 2
1 % 10 = 1
"""
try:# 1.输入一个[1,999]的数字num = int(input())
except:print("输入非法数据,必须1~999")
else:# 2.取个位数gewei = num % 10# 3.取十位数num //= 10shiwei = num % 10# 4.取百位数baiwei = num // 10# 5.相加result = gewei + shiwei + baiwei# 6.输出相加结果print(result)
练习04 计算三角形的面积
题目描述
输入三角形的三个顶点坐标,并计算其面积,计算公式如下
s = ( s i d e 1 + s i d e 2 + s i d e 3 ) / 2 a r e a = s ( s − s i d e 1 ) ( s − s i d e 2 ) ( s − s i d e 3 ) s=(side1+side2+side3)/2 \\ area = \sqrt{s(s-side1)(s-side2)(s-side3)} s=(side1+side2+side3)/2area=s(s−side1)(s−side2)(s−side3)
输入输出描述
输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔
输出三角形的面积,结果保留一位小数
示例
输入:
1.5 -3.4 4.6 5 9.5 -3.4
输出:
33.6
# 1.输入三个点的坐标
x1, y1, x2, y2, x3, y3 = map(float, input().split(" "))# 2.计算三边
side1 = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
side2 = ((x1 - x3) ** 2 + (y1 - y3) ** 2) ** 0.5
side3 = ((x3 - x2) ** 2 + (y3 - y2) ** 2) ** 0.5# 3.计算半周长
s = (side1 + side2 + side3) / 2# 4.计算面积
area = pow(s * (s - side1) * (s - side2) * (s - side3), 0.5) # 5.输出面积
print(f'{area:.1f}')
练习05 显示当前时间
题目描述
输入你所在的时区,并输出当前的时间
输入输出描述
输入时区,如东八区为8,西五区为-5
输出二十四小时制的时间,格式为 时:分:秒
示例
输入:
8
输出:
21:43:12
import time
# 0.获取时区数字
zone = int(input())
# 返回的是UNIX时间点
# 从1970年1月1日 00:00:00 开始至今的秒数
# 1.获取所有的秒数
total_seconds = int(time.time())# 2.计算当前的秒数
current_seconds = total_seconds % 60# 3.计算所有的分钟数
total_minutes = total_seconds // 60# 4.计算当前的分钟数
current_minutes = total_minutes % 60# 5.计算所有的小时数
total_hours = total_minutes // 60# 6.计算当前的小时数
current_hours = total_hours % 24
current_hours = (current_hours + zone) % 24
# 7.拼接输出 hh:mm:ss
print(f'{current_hours}:{current_minutes}:{current_seconds}')
练习06 最小数量的硬币
题目描述
假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币
输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少
输入输出描述
输入总金额
输出每种硬币的个数
示例
输入:
11.56
输出:
11个一元硬币
2个两角五分硬币
0个一角硬币
1个五分硬币
1个一分硬币
# 1.输入总金额
money = float(input())# 2.换算成分
total_fen = int(money * 100)# 3.计算一元硬币个数 100分
yiyuan = total_fen // 100# 4.计算两角五分个数 25分
total_fen = total_fen % 100
liangjiaowufen = total_fen // 25# 5.计算一角个数 10分
total_fen = total_fen % 25
yijiao = total_fen // 10# 6.计算五分个数 5分
total_fen = total_fen % 10
wufen = total_fen // 5# 7.计算1分个数 1分
total_fen = total_fen % 5
yifen = total_fen# 8.输出
print(yiyuan)
print(liangjiaowufen)
print(yijiao)
print(wufen)
print(yifen)