python全栈(基础篇)——day03:基础内容(字符串格式化+简单数据类型转换+进制的转换+运算符+实战演示+每日一题)
目录
格式化
%格式化(传统方法)
format()方法(Python 2.6+)
f-string(Python 3.6+ 推荐)
简单数据类型转换
显式类型转换
隐式类型转换
进制转换
二进制转十进制
十进制转二进制
二进制转八进制
八进制转二进制
二进制转十六进制
十六进制到二进制
八进制到十六进制
十六进制到八进制
不同进制表示
进制转换函数
格式化输出不同进制
运算符
算术运算符
比较运算符
逻辑运算符
位运算符
基础位运算符
1. 按位与(AND) - &
2. 按位或(OR) - |
3. 按位异或(XOR) - ^
4. 按位取反(NOT) - ~
5. 左移(Left Shift) - <<
6. 右移(Right Shift) - >>
实际应用场景
实战演示
实战演示1:学生成绩单生成器
实战演示2:进制转换计算器
实战演示3:数学运算演示
实战演示4:位运算实际应用
实战演示5:综合应用 - 简单计算器
每日一题
总结
欢迎在评论区进行打卡留言,并分享学习经验,题目讲解以及分享更多内容,关注博主或者订阅专栏,可以第一时间看到博主发表的
格式化
最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'
之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。
%格式化(传统方法)
在Python中,采用的格式化方式和C语言是一致的,用%
实现,举例如下:
>>> 'Hello, %s' % 'world' # 一个占位符可以不写括号
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?
,括号可以省略。
常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
# 基本用法
name = "张三"
age = 25
print("我叫%s,今年%d岁" % (name, age))
# 常用格式符
# %s - 字符串
# %d - 十进制整数
# %f - 浮点数
# %x - 十六进制数
# 示例
price = 15.8
quantity = 3
total = price * quantity
print("单价:%.2f元,数量:%d个,总计:%.2f元" % (price, quantity, total))
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
# 第一个%2d表示占2个位置,如果只有一个数字就补空格
# 第二个%02d表示占2个位置,如果只有一个数字就补0
print('%2d-%02d' % (3, 1))
# 表示保留2位小数
print('%.2f' % 3.1415926)
"""
输出结果:3-01
3.14
"""
# 注意:第一个结果前面有控格
如果你不太确定应该用什么,%s
永远起作用,它会把任何数据类型转换为字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
有些时候,字符串里面的%
是一个普通字符怎么办?这个时候就需要转义,用%%
来表示一个%
:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
注意:这里不要使用\
符号进行转义
format()方法(Python 2.6+)
另一种格式化字符串的方法是使用字符串的format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……,不过这种方式写起来比%要麻烦得多:
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
# 基本用法
name = "李四"
age = 30
print("我叫{},今年{}岁".format(name, age))
# 位置参数
print("{0}喜欢{1},{1}也喜欢{0}".format("小明", "小红"))
# 关键字参数
print("姓名:{name},年龄:{age},城市:{city}".format(name="王五", age=28, city="北京"))
# 数字格式化
pi = 3.1415926
print("圆周率:{:.2f}".format(pi)) # 保留2位小数
print("数字:{:06d}".format(42)) # 宽度6,不足补0
f-string(Python 3.6+ 推荐)
最后一种格式化字符串的方法是使用以f
开头的字符串,称之为f-string
,它和普通字符串不同之处在于,字符串如果包含{xxx}
,就会以对应的变量替换:
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
上述代码中,{r}
被变量r
的值替换,{s:.2f}
被变量s
的值替换,并且:
后面的.2f
指定了格式化参数(即保留两位小数),因此,{s:.2f}
的替换结果是19.62
。
# 基本用法
name = "赵六"
age = 35
print(f"我叫{name},今年{age}岁")
# 表达式计算
a = 10
b = 20
print(f"{a} + {b} = {a + b}")
# 数字格式化
price = 99.99
count = 5
print(f"单价:{price:.2f}元")
print(f"总计:{price * count:.2f}元")
简单数据类型转换
数据类型转换是将一个数据类型转换为另一个数据类型的过程。
显式类型转换
函数 | 作用 |
---|---|
int() | 将数字转换为整数 |
str() | 将数字转换为字符串 |
float() | 将数字转换为浮点数 |
bool() | 将原类型转换为布尔型 |
# 字符串转数字
str_num = "123"
int_num = int(str_num) # 转整数
float_num = float("3.14") # 转浮点数
print(f"字符串'{str_num}'转整数:{int_num}")
# 数字转字符串
num = 456
str_result = str(num)
print(f"数字{num}转字符串:'{str_result}'")
# 布尔值转换
bool_true = bool(1) # True
bool_false = bool(0) # False
bool_str = bool("Hello") # True
bool_empty = bool("") # False
print(f"bool(1) = {bool_true}")
print(f"bool(0) = {bool_false}")
print(f"bool('Hello') = {bool_str}")
print(f"bool('') = {bool_empty}")
隐式类型转换
# 整数和浮点数运算
result1 = 10 + 3.14 # 整数自动转为浮点数
print(f"10 + 3.14 = {result1}")
# 布尔值参与运算
result2 = True + 5 # True转为1
result3 = False * 10 # False转为0
print(f"True + 5 = {result2}")
print(f"False * 10 = {result3}")
# 字符串拼接时的转换
name = "小明"
age = 18
# 需要显式转换,否则会报错
message = name + "今年" + str(age) + "岁"
print(message)
进制转换
二进制转十进制
原理:二进制数使用基数为2,每个位上的数字乘以2的幂次(从右向左,幂次从0开始),然后求和。步骤:
-
写出二进制数的每个位。
-
从右向左,给每个位分配权重:2^0, 2^1, 2^2, ...。
-
将每个位乘以对应的权重。
-
将所有乘积相加,得到十进制数。
例子:将二进制数1011转换为十进制。
-
最右边位(最低位):1 × 2^0 = 1 × 1 = 1
-
下一位:1 × 2^1 = 1 × 2 = 2
-
下一位:0 × 2^2 = 0 × 4 = 0
-
最左边位(最高位):1 × 2^3 = 1 × 8 = 8
-
求和:1 + 2 + 0 + 8 = 11所以,1011₂ = 11₁₀。
十进制转二进制
原理:通过连续除以2,记录余数,直到商为0,然后从下往上读取余数。步骤:
-
将十进制数除以2,记录商和余数。
-
用商继续除以2,记录余数,重复直到商为0。
-
将余数从下往上(最后一次除法的余数在最左边)排列,得到二进制数。
例子:将十进制数11转换为二进制。
-
11 ÷ 2 = 5 ... 余1
-
5 ÷ 2 = 2 ... 余1
-
2 ÷ 2 = 1 ... 余0
-
1 ÷ 2 = 0 ... 余1从下往上读取余数:1011所以,11₁₀ = 1011₂。
二进制转八进制
原理:八进制基数为8,每个八进制位对应3个二进制位(因为2^3=8)。从二进制数的小数点开始,向左和向右分组,每3位一组(不足3位时补零),然后将每组转换为八进制数。步骤:
-
从二进制数的小数点位置开始,向左(整数部分)和向右(小数部分)分组,每3位一组。
-
如果最左边或最右边一组不足3位,补零。
-
将每组二进制数转换为八进制数(使用二进制到十进制的原理,但只处理3位)。
例子:将二进制数1011101转换为八进制。
-
二进制数:1011101(没有小数点,视为整数)。
-
从右向左分组:101(最右边3位)、011(中间3位)、001(最左边只有1位,补零成001)。
-
转换每组:
-
001₂ = 1₈
-
011₂ = 3₈
-
101₂ = 5₈
-
-
组合:135所以,1011101₂ = 135₈。
八进制转二进制
原理:将每个八进制位转换为3位二进制数。步骤:
-
将八进制数的每个位单独处理。
-
将每个八进制位转换为3位二进制数(使用十进制到二进制的原理,但只处理0-7)。
-
组合所有二进制组,忽略前导零。
例子:将八进制数135转换为二进制。
-
1₈ = 001₂
-
3₈ = 011₂
-
5₈ = 101₂
-
组合:001011101,省略前导零后为1011101₂。所以,135₈ = 1011101₂。
二进制转十六进制
原理:十六进制基数为16,每个十六进制位对应4个二进制位(因为2^4=16)。从二进制数的小数点开始,向左和向右分组,每4位一组(不足4位时补零),然后将每组转换为十六进制数(0-9和A-F)。步骤:
-
从二进制数的小数点位置开始,向左和向右分组,每4位一组。
-
如果最左边或最右边一组不足4位,补零。
-
将每组二进制数转换为十六进制数。
例子:将二进制数1011101转换为十六进制。
-
二进制数:1011101。
-
从右向左分组:1101(最右边4位)、0101(最左边4位,补零成0101)。
-
转换每组:
-
0101₂ = 5₁₆
-
1101₂ = D₁₆(13十进制)
-
-
组合:5D所以,1011101₂ = 5D₁₆。
十六进制到二进制
原理:将每个十六进制位转换为4位二进制数。步骤:
-
将十六进制数的每个位单独处理。
-
将每个十六进制位转换为4位二进制数。
-
组合所有二进制组,忽略前导零。
例子:将十六进制数5D转换为二进制。
-
5₁₆ = 0101₂
-
D₁₆ = 1101₂
-
组合:01011101,省略前导零后为1011101₂。所以,5D₁₆ = 1011101₂。
八进制到十六进制
原理:通常以二进制作为中介。先将八进制转换为二进制,然后将二进制转换为十六进制。步骤:
-
将八进制数转换为二进制(每个八进制位转3位二进制)。
-
将得到的二进制数转换为十六进制(每4位一组)。
例子:将八进制数135转换为十六进制。
-
首先,135₈ 转换为二进制:
-
1₈ = 001₂
-
3₈ = 011₂
-
5₈ = 101₂
-
组合:001011101₂ = 1011101₂(省略前导零)。
-
-
然后将1011101₂ 转换为十六进制:
-
分组:0101(左边补零)、1101。
-
0101₂ = 5₁₆
-
1101₂ = D₁₆
-
组合:5D所以,135₈ = 5D₁₆。
-
十六进制到八进制
原理:以二进制作为中介。先将十六进制转换为二进制,然后将二进制转换为八进制。步骤:
-
将十六进制数转换为二进制(每个十六进制位转4位二进制)。
-
将得到的二进制数转换为八进制(每3位一组)。
例子:将十六进制数5D转换为八进制。
-
首先,5D₁₆ 转换为二进制:
-
5₁₆ = 0101₂
-
D₁₆ = 1101₂
-
组合:01011101₂ = 1011101₂(省略前导零)。
-
-
然后将1011101₂ 转换为八进制:
-
分组:001(左边补零)、011、101。
-
001₂ = 1₈
-
011₂ = 3₈
-
101₂ = 5₈
-
组合:135所以,5D₁₆ = 135₈。
-
不同进制表示
# 不同进制的字面量表示
decimal = 100 # 十进制
binary = 0b1100100 # 二进制(前缀0b)
octal = 0o144 # 八进制(前缀0o)
hexadecimal = 0x64 # 十六进制(前缀0x)
print(f"十进制:{decimal}")
print(f"二进制:{binary}")
print(f"八进制:{octal}")
print(f"十六进制:{hexadecimal}")
进制转换函数
# 十进制转其他进制
num = 255
# 转二进制
bin_str = bin(num)
print(f"{num} 的二进制:{bin_str}")
# 转八进制
oct_str = oct(num)
print(f"{num} 的八进制:{oct_str}")
# 转十六进制
hex_str = hex(num)
print(f"{num} 的十六进制:{hex_str}")
# 其他进制转十进制
# 使用int()函数,第二个参数指定进制
binary_num = "11111111"
decimal_from_bin = int(binary_num, 2)
print(f"二进制{binary_num}转十进制:{decimal_from_bin}")
octal_num = "377"
decimal_from_oct = int(octal_num, 8)
print(f"八进制{octal_num}转十进制:{decimal_from_oct}")
hex_num = "FF"
decimal_from_hex = int(hex_num, 16)
print(f"十六进制{hex_num}转十进制:{decimal_from_hex}")
格式化输出不同进制
基于前面学习的f-string格式化
代码 | 意义 |
---|---|
{变量:d} | 表示十进制输出 |
{变量:b} | 表示二进制输出 |
{变量:o} | 表示八进制输出 |
{变量:x} | 表示十六进制输出,字母小写 |
{变量:X} | 表示十六进制输出,字母大写 |
{变量:#b} | 表示带前缀的二进制输出,例如0b101010 |
{变量:#o} | 表示带前缀的八进制输出,例如0o52 |
{变量:#x} | 表示带前缀的十六进制输出,例如0x2a |
num = 42
# 使用格式化输出不同进制
print(f"十进制:{num:d}") # 42
print(f"二进制:{num:b}") # 101010
print(f"八进制:{num:o}") # 52
print(f"十六进制:{num:x}") # 2a(小写)
print(f"十六进制:{num:X}") # 2A(大写)
# 带前缀的格式化
print(f"二进制:{num:#b}") # 0b101010
print(f"八进制:{num:#o}") # 0o52
print(f"十六进制:{num:#x}") # 0x2a
运算符
算术运算符
符号 | 意义 |
---|---|
+ | 表示加法运算 |
- | 表示减法运算 |
* | 表示乘法运算 |
/ | 表示除法运算 |
% | 表示余运算 |
** | 表示幂运算 |
a = 10
b = 3
print(f"a = {a}, b = {b}")
print(f"加法:a + b = {a + b}") # 13
print(f"减法:a - b = {a - b}") # 7
print(f"乘法:a * b = {a * b}") # 30
print(f"除法:a / b = {a / b}") # 3.333...
print(f"取整:a // b = {a // b}") # 3
print(f"取余:a % b = {a % b}") # 1
print(f"幂运算:a ** b = {a ** b}") # 1000
# 特殊用法
print(f"字符串重复:{'hi' * 3}") # hihihi
比较运算符
符号 | 意义 |
---|---|
> | 大于运算 |
< | 小于运算 |
== | 等于运算 |
!= | 不等于运算 |
x = 10
y = 20
print(f"x = {x}, y = {y}")
print(f"等于:x == y -> {x == y}") # False
print(f"不等于:x != y -> {x != y}") # True
print(f"大于:x > y -> {x > y}") # False
print(f"小于:x < y -> {x < y}") # True
print(f"大于等于:x >= y -> {x >= y}") # False
print(f"小于等于:x <= y -> {x <= y}") # True
# 字符串比较(按编码序)
print(f"字符串比较:'apple' < 'banana' -> {'apple' < 'banana'}") # True
逻辑运算符
符号 | 意义 |
---|---|
and | 同时满足 |
or | 其中一个满足 |
not | 取反 |
a = True
b = False
print(f"a = {a}, b = {b}")
print(f"与:a and b -> {a and b}") # False
print(f"或:a or b -> {a or b}") # True
print(f"非:not a -> {not a}") # False
# 实际应用
age = 20
has_license = True
can_drive = age >= 18 and has_license
print(f"年龄{age}岁,有驾照:{has_license},可以开车:{can_drive}")
位运算符
符号 | 意义 |
---|---|
& | 与运算,两位都为1则为1 |
| | 或运算,其中一位为1则为1 |
^ | 异或运算,两位不相同则为1 |
~ | 按位取反(NOT),0变1,1变0 |
<< | 左移,所有位向左移动,低位补0 |
>> | 右移, 所有位向右移动,高位补0(逻辑右移) |
位运算是直接对整数在内存中的二进制位进行操作的一种运算。它们在底层编程、算法优化、加密等领域有广泛应用。下面我将详细讲解各种位运算符及其应用。
基础位运算符
1. 按位与(AND) - &
规则:两个位都为1时,结果才为1
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
例子:
a = 5 # 二进制: 0101
b = 3 # 二进制: 0011
result = a & b # 0101 & 0011 = 0001 = 1
print(result) # 输出: 1
应用:
-
判断奇偶:
n & 1
(为1是奇数,为0是偶数) -
清零特定位
-
取指定位
2. 按位或(OR) - |
规则:两个位有一个为1时,结果就为1
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
例子:
a = 5 # 0101
b = 3 # 0011
result = a | b # 0101 | 0011 = 0111 = 7
print(result) # 输出: 7
应用:
-
设置特定位为1
-
合并标志位
3. 按位异或(XOR) - ^
规则:两个位不同时结果为1,相同时结果为0
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
例子:
a = 5 # 0101
b = 3 # 0011
result = a ^ b # 0101 ^ 0011 = 0110 = 6
print(result) # 输出: 6
重要性质:
-
交换律:
a ^ b = b ^ a
-
结合律:
(a ^ b) ^ c = a ^ (b ^ c)
-
自反性:
a ^ a = 0
-
与0异或:
a ^ 0 = a
应用:
-
交换两个数(不用临时变量)
-
找出现奇数次的数字
-
简单加密
4. 按位取反(NOT) - ~
规则:0变1,1变0
~0 = 1 ~1 = 0
例子:
a = 5 # 0101
result = ~a # 在Python中,~5 = -6
print(result) # 输出: -6
注意:在大多数编程语言中,整数用补码表示,所以 ~n = -n - 1
5. 左移(Left Shift) - <<
规则:所有位向左移动,低位补0
a << n # 将a的二进制位左移n位
例子:
a = 5 # 0101
result = a << 2 # 0101 << 2 = 010100 = 20
print(result) # 输出: 20
数学意义:a << n = a × 2ⁿ
-
5 << 1 = 10
(5×2=10) -
5 << 2 = 20
(5×4=20) -
5 << 3 = 40
(5×8=40)
6. 右移(Right Shift) - >>
规则:所有位向右移动,高位补0(逻辑右移)或补符号位(算术右移)
例子:
a = 20 # 10100
result = a >> 2 # 10100 >> 2 = 00101 = 5
print(result) # 输出: 5
数学意义:a >> n = a ÷ 2ⁿ
(向下取整)
-
20 >> 1 = 10
(20÷2=10) -
20 >> 2 = 5
(20÷4=5) -
20 >> 3 = 2
(20÷8=2.5→2)
实际应用场景
-
算法优化:在动态规划、搜索算法中用于状态压缩
-
系统编程:操作系统、网络协议中的标志位处理
-
图形学:颜色操作、图像处理
-
加密算法:异或运算用于简单加密
-
游戏开发:碰撞检测、状态管理
-
数据库:位图索引
位运算的强大之处在于它的高效性,这些操作通常在单个CPU周期内完成,比相应的算术运算快得多。掌握位运算可以让你写出更高效、更优雅的代码。
实战演示
实战演示1:学生成绩单生成器
# 实战演示1:学生成绩单生成器
print("=" * 50)
print(" 学生成绩单生成器")
print("=" * 50)
# 学生基本信息
student_name = "张三"
student_id = "2023001"
chinese_score = 85.5
math_score = 92.0
english_score = 78.5
# 计算总分和平均分
total_score = chinese_score + math_score + english_score
average_score = total_score / 3
# 使用不同的字符串格式化方法输出
print("\n【使用%格式化输出】")
print("学生姓名:%s" % student_name)
print("学号:%s" % student_id)
print("语文:%.1f分,数学:%.1f分,英语:%.1f分" % (chinese_score, math_score, english_score))
print("总分:%.1f分,平均分:%.1f分" % (total_score, average_score))
print("\n【使用format方法输出】")
print("学生姓名:{}".format(student_name))
print("学号:{}".format(student_id))
print("语文:{:.1f}分,数学:{:.1f}分,英语:{:.1f}分".format(chinese_score, math_score, english_score))
print("总分:{:.1f}分,平均分:{:.1f}分".format(total_score, average_score))
print("\n【使用f-string输出】")
print(f"学生姓名:{student_name}")
print(f"学号:{student_id}")
print(f"语文:{chinese_score:.1f}分,数学:{math_score:.1f}分,英语:{english_score:.1f}分")
print(f"总分:{total_score:.1f}分,平均分:{average_score:.1f}分")
# 数据类型转换演示
print("\n" + "=" * 50)
print(" 数据类型转换演示")
print("=" * 50)
# 字符串转数字
score_str = "95.5"
converted_score = float(score_str)
print(f"字符串 '{score_str}' 转换为浮点数:{converted_score}")
# 数字转字符串
age = 18
age_str = str(age)
print(f"数字 {age} 转换为字符串:'{age_str}'")
# 布尔值转换
has_scholarship = True
print(f"是否有奖学金:{has_scholarship},转换为整数:{int(has_scholarship)}")
实战演示2:进制转换计算器
# 实战演示2:进制转换计算器
print("\n" + "=" * 50)
print(" 进制转换计算器")
print("=" * 50)
# 定义一个十进制数
decimal_number = 42
print(f"原始十进制数:{decimal_number}")
# 转换为其他进制
binary_number = bin(decimal_number)
octal_number = oct(decimal_number)
hexadecimal_number = hex(decimal_number)
print(f"二进制:{binary_number}")
print(f"八进制:{octal_number}")
print(f"十六进制:{hexadecimal_number}")
# 使用格式化输出不同进制
print("\n【使用格式化输出进制】")
print(f"十进制:{decimal_number:d}")
print(f"二进制:{decimal_number:b}")
print(f"八进制:{decimal_number:o}")
print(f"十六进制(小写):{decimal_number:x}")
print(f"十六进制(大写):{decimal_number:X}")
print("\n【带前缀的格式化输出】")
print(f"二进制:{decimal_number:#b}")
print(f"八进制:{decimal_number:#o}")
print(f"十六进制:{decimal_number:#x}")
# 其他进制转十进制
print("\n" + "=" * 50)
print(" 其他进制转十进制")
print("=" * 50)
binary_str = "101010"
octal_str = "52"
hex_str = "2A"
decimal_from_binary = int(binary_str, 2)
decimal_from_octal = int(octal_str, 8)
decimal_from_hex = int(hex_str, 16)
print(f"二进制 '{binary_str}' 转十进制:{decimal_from_binary}")
print(f"八进制 '{octal_str}' 转十进制:{decimal_from_octal}")
print(f"十六进制 '{hex_str}' 转十进制:{decimal_from_hex}")
实战演示3:数学运算演示
# 实战演示3:数学运算演示
print("\n" + "=" * 50)
print(" 数学运算演示")
print("=" * 50)
# 定义两个数字
a = 15
b = 4
print(f"a = {a}, b = {b}")
# 算术运算
print("\n【算术运算】")
print(f"加法:{a} + {b} = {a + b}")
print(f"减法:{a} - {b} = {a - b}")
print(f"乘法:{a} × {b} = {a * b}")
print(f"除法:{a} ÷ {b} = {a / b}")
print(f"取整除法:{a} ÷ {b} = {a // b}")
print(f"取余:{a} % {b} = {a % b}")
print(f"幂运算:{a} 的 {b} 次方 = {a ** b}")
# 比较运算
print("\n【比较运算】")
print(f"{a} > {b} -> {a > b}")
print(f"{a} < {b} -> {a < b}")
print(f"{a} == {b} -> {a == b}")
print(f"{a} != {b} -> {a != b}")
print(f"{a} >= {b} -> {a >= b}")
print(f"{a} <= {b} -> {a <= b}")
# 逻辑运算
print("\n【逻辑运算】")
x = True
y = False
print(f"x = {x}, y = {y}")
print(f"x and y -> {x and y}")
print(f"x or y -> {x or y}")
print(f"not x -> {not x}")
print(f"not y -> {not y}")
# 实际应用场景
print("\n【实际应用场景】")
age = 20
has_id_card = True
has_money = False
can_enter_bar = age >= 18 and has_id_card
can_buy_drink = age >= 18 or has_money
print(f"年龄:{age}岁,有身份证:{has_id_card},有钱:{has_money}")
print(f"可以进入酒吧:{can_enter_bar}")
print(f"可以买饮料:{can_buy_drink}")
实战演示4:位运算实际应用
# 实战演示4:位运算实际应用
print("\n" + "=" * 50)
print(" 位运算实际应用")
print("=" * 50)
# 定义两个数字
num1 = 12 # 二进制:1100
num2 = 10 # 二进制:1010
print(f"num1 = {num2:b} ({num1})")
print(f"num2 = {num2:b} ({num2})")
# 位运算
print("\n【位运算】")
print(f"按位与:{num1:b} & {num2:b} = {num1 & num2:b} ({num1 & num2})")
print(f"按位或:{num1:b} | {num2:b} = {num1 | num2:b} ({num1 | num2})")
print(f"按位异或:{num1:b} ^ {num2:b} = {num1 ^ num2:b} ({num1 ^ num2})")
print(f"按位取反:~{num1:b} = {~num1 & 0b1111:b} ({~num1 & 0b1111})")
print(f"左移:{num1:b} << 1 = {num1 << 1:b} ({num1 << 1})")
print(f"右移:{num1:b} >> 1 = {num1 >> 1:b} ({num1 >> 1})")
# 实际应用:权限系统(简化版)
print("\n【权限系统应用】")
# 定义权限常量
READ_PERMISSION = 0b001 # 1
WRITE_PERMISSION = 0b010 # 2
EXECUTE_PERMISSION = 0b100 # 4
# 用户权限
user_permissions = READ_PERMISSION | WRITE_PERMISSION # 有读和写权限
print(f"用户权限:{user_permissions:03b}")
# 检查权限
has_read = (user_permissions & READ_PERMISSION) == READ_PERMISSION
has_write = (user_permissions & WRITE_PERMISSION) == WRITE_PERMISSION
has_execute = (user_permissions & EXECUTE_PERMISSION) == EXECUTE_PERMISSION
print(f"有读权限:{has_read}")
print(f"有写权限:{has_write}")
print(f"有执行权限:{has_execute}")
实战演示5:综合应用 - 简单计算器
# 实战演示5:综合应用 - 简单计算器
print("\n" + "=" * 50)
print(" 综合应用 - 简单计算器")
print("=" * 50)
# 定义计算数据
number1 = 25
number2 = 7
number3 = 3.14
print(f"数字1:{number1}")
print(f"数字2:{number2}")
print(f"数字3:{number3}")
# 综合运算
print("\n【综合运算结果】")
# 算术运算
addition = number1 + number2
subtraction = number1 - number2
multiplication = number1 * number2
division = number1 / number2
modulo = number1 % number2
power = number1 ** number3
print(f"加法:{number1} + {number2} = {addition}")
print(f"减法:{number1} - {number2} = {subtraction}")
print(f"乘法:{number1} × {number2} = {multiplication}")
print(f"除法:{number1} ÷ {number2} = {division:.2f}")
print(f"取余:{number1} % {number2} = {modulo}")
print(f"幂运算:{number1} 的 {number3} 次方 = {power:.2f}")
# 数据类型转换
print("\n【数据类型转换】")
str_number = "100"
int_from_str = int(str_number)
float_from_str = float(str_number)
print(f"字符串 '{str_number}' 转整数:{int_from_str}")
print(f"字符串 '{str_number}' 转浮点数:{float_from_str}")
# 进制转换
print("\n【进制转换】")
print(f"十进制 {number1} 的二进制:{bin(number1)}")
print(f"十进制 {number1} 的八进制:{oct(number1)}")
print(f"十进制 {number1} 的十六进制:{hex(number1)}")
# 格式化输出
print("\n【格式化输出展示】")
print("使用%格式化:数字1=%d,数字2=%d,结果=%.2f" % (number1, number2, division))
print("使用format:数字1={},数字2={},结果={:.2f}".format(number1, number2, division))
print(f"使用f-string:数字1={number1},数字2={number2},结果={division:.2f}")
# 综合表达式
print("\n【综合表达式计算】")
complex_result = (number1 + number2) * number3 - (number1 % number2)
print(f"({number1} + {number2}) × {number3} - ({number1} % {number2}) = {complex_result:.2f}")
每日一题
题目要求:综合运用今天学习的所有知识,创建一个个人数字名片程序。
名片包含信息:
-
基本信息:姓名、年龄、职业
-
联系方式:电话(数字)、邮箱
-
技能评分:编程能力(0-100)、英语水平(0-100)
-
特殊编码:个人ID(用二进制、八进制、十六进制表示年龄)
功能要求:
-
使用三种字符串格式化方法分别展示不同部分的信息
-
计算技能平均分
-
将年龄转换为不同进制显示
-
使用各种运算符进行简单的数据分析
-
格式化输出美观的名片
输出示例:
text
================================个人数字名片
================================
姓名:张伟
年龄:28岁(二进制:11100,八进制:34,十六进制:1C)
职业:软件工程师
电话:13800138000
邮箱:zhangwei@email.com
编程能力:85分,英语水平:78分
技能平均分:81.5分
================================
请编写完整的个人数字名片程序。
总结
今天的所有实战演示都严格基于已学知识:
-
字符串格式化:使用了%格式化、format()方法和f-string
-
数据类型转换:演示了int()、float()、str()、bool()的用法
-
进制转换:展示了bin()、oct()、hex()和int()的进制转换功能
-
运算符:涵盖了算术、比较、逻辑、位运算符的使用
每个实战演示都聚焦于一个具体的应用场景,通过实际的代码示例帮助你巩固所学知识。建议你亲自运行这些代码,并尝试修改其中的数值和变量,观察不同的输出结果,这样可以更好地理解和掌握今天的内容。
记住,编程是一门实践性很强的技能,多动手练习是提高的最佳途径!
欢迎在评论区进行打卡留言,并分享学习经验,题目讲解以及分享更多内容,关注博主或者订阅专栏,可以第一时间看到博主的发表博文,感谢大家支持,我们下期见!