当前位置: 首页 > news >正文

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开始),然后求和。步骤

  1. 写出二进制数的每个位。

  2. 从右向左,给每个位分配权重:2^0, 2^1, 2^2, ...。

  3. 将每个位乘以对应的权重。

  4. 将所有乘积相加,得到十进制数。

例子:将二进制数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,然后从下往上读取余数。步骤

  1. 将十进制数除以2,记录商和余数。

  2. 用商继续除以2,记录余数,重复直到商为0。

  3. 将余数从下往上(最后一次除法的余数在最左边)排列,得到二进制数。

例子:将十进制数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位时补零),然后将每组转换为八进制数。步骤

  1. 从二进制数的小数点位置开始,向左(整数部分)和向右(小数部分)分组,每3位一组。

  2. 如果最左边或最右边一组不足3位,补零。

  3. 将每组二进制数转换为八进制数(使用二进制到十进制的原理,但只处理3位)。

例子:将二进制数1011101转换为八进制。

  • 二进制数:1011101(没有小数点,视为整数)。

  • 从右向左分组:101(最右边3位)、011(中间3位)、001(最左边只有1位,补零成001)。

  • 转换每组:

    • 001₂ = 1₈

    • 011₂ = 3₈

    • 101₂ = 5₈

  • 组合:135所以,1011101₂ = 135₈。

八进制转二进制

原理:将每个八进制位转换为3位二进制数。步骤

  1. 将八进制数的每个位单独处理。

  2. 将每个八进制位转换为3位二进制数(使用十进制到二进制的原理,但只处理0-7)。

  3. 组合所有二进制组,忽略前导零。

例子:将八进制数135转换为二进制。

  • 1₈ = 001₂

  • 3₈ = 011₂

  • 5₈ = 101₂

  • 组合:001011101,省略前导零后为1011101₂。所以,135₈ = 1011101₂。

二进制转十六进制

原理:十六进制基数为16,每个十六进制位对应4个二进制位(因为2^4=16)。从二进制数的小数点开始,向左和向右分组,每4位一组(不足4位时补零),然后将每组转换为十六进制数(0-9和A-F)。步骤

  1. 从二进制数的小数点位置开始,向左和向右分组,每4位一组。

  2. 如果最左边或最右边一组不足4位,补零。

  3. 将每组二进制数转换为十六进制数。

例子:将二进制数1011101转换为十六进制。

  • 二进制数:1011101。

  • 从右向左分组:1101(最右边4位)、0101(最左边4位,补零成0101)。

  • 转换每组:

    • 0101₂ = 5₁₆

    • 1101₂ = D₁₆(13十进制)

  • 组合:5D所以,1011101₂ = 5D₁₆。

十六进制到二进制

原理:将每个十六进制位转换为4位二进制数。步骤

  1. 将十六进制数的每个位单独处理。

  2. 将每个十六进制位转换为4位二进制数。

  3. 组合所有二进制组,忽略前导零。

例子:将十六进制数5D转换为二进制。

  • 5₁₆ = 0101₂

  • D₁₆ = 1101₂

  • 组合:01011101,省略前导零后为1011101₂。所以,5D₁₆ = 1011101₂。

八进制到十六进制

原理:通常以二进制作为中介。先将八进制转换为二进制,然后将二进制转换为十六进制。步骤

  1. 将八进制数转换为二进制(每个八进制位转3位二进制)。

  2. 将得到的二进制数转换为十六进制(每4位一组)。

例子:将八进制数135转换为十六进制。

  • 首先,135₈ 转换为二进制:

    • 1₈ = 001₂

    • 3₈ = 011₂

    • 5₈ = 101₂

    • 组合:001011101₂ = 1011101₂(省略前导零)。

  • 然后将1011101₂ 转换为十六进制:

    • 分组:0101(左边补零)、1101。

    • 0101₂ = 5₁₆

    • 1101₂ = D₁₆

    • 组合:5D所以,135₈ = 5D₁₆。

十六进制到八进制

原理:以二进制作为中介。先将十六进制转换为二进制,然后将二进制转换为八进制。步骤

  1. 将十六进制数转换为二进制(每个十六进制位转4位二进制)。

  2. 将得到的二进制数转换为八进制(每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)

实际应用场景

  1. 算法优化:在动态规划、搜索算法中用于状态压缩

  2. 系统编程:操作系统、网络协议中的标志位处理

  3. 图形学:颜色操作、图像处理

  4. 加密算法:异或运算用于简单加密

  5. 游戏开发:碰撞检测、状态管理

  6. 数据库:位图索引

位运算的强大之处在于它的高效性,这些操作通常在单个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(用二进制、八进制、十六进制表示年龄)

功能要求:

  1. 使用三种字符串格式化方法分别展示不同部分的信息

  2. 计算技能平均分

  3. 将年龄转换为不同进制显示

  4. 使用各种运算符进行简单的数据分析

  5. 格式化输出美观的名片

输出示例:

text

================================个人数字名片
================================
姓名:张伟
年龄:28岁(二进制:11100,八进制:34,十六进制:1C)
职业:软件工程师
电话:13800138000
邮箱:zhangwei@email.com
编程能力:85分,英语水平:78分
技能平均分:81.5分
================================

请编写完整的个人数字名片程序。

总结

今天的所有实战演示都严格基于已学知识:

  1. 字符串格式化:使用了%格式化、format()方法和f-string

  2. 数据类型转换:演示了int()、float()、str()、bool()的用法

  3. 进制转换:展示了bin()、oct()、hex()和int()的进制转换功能

  4. 运算符:涵盖了算术、比较、逻辑、位运算符的使用

每个实战演示都聚焦于一个具体的应用场景,通过实际的代码示例帮助你巩固所学知识。建议你亲自运行这些代码,并尝试修改其中的数值和变量,观察不同的输出结果,这样可以更好地理解和掌握今天的内容。

记住,编程是一门实践性很强的技能,多动手练习是提高的最佳途径!

欢迎在评论区进行打卡留言,并分享学习经验,题目讲解以及分享更多内容,关注博主或者订阅专栏,可以第一时间看到博主的发表博文,感谢大家支持,我们下期见!

http://www.dtcms.com/a/442260.html

相关文章:

  • 学网站建设能赚钱吗网上购物哪家质量好
  • 基于ASRPRO的语音对话
  • 女人与狗做网站天津重型网站建设风格
  • 拼图小游戏开发日记 | Day3(已完结)
  • Go 1.25 新特性:正式支持 Git 仓库子目录作为 Go 模块
  • 鸿蒙NEXT Remote Communication Kit:打破设备壁垒,构筑无缝协同体验
  • 那些网站建设的好杭州建站程序
  • 做团购网站企业网站设计调查问卷
  • 基于 RoBERTa + 多策略优化的中文商品名细粒度分类
  • 做翻译兼职的网站是哪个特色的网站建设
  • 山西建设银行招聘网站crm系统的销售管理功能包括
  • 如何在C#中配置ONNX Runtime以确保准确性和目标框位置的正确性?
  • PiscCode使用YOLO识别超大分辨率高清视图实践
  • 力扣2200. 找出数组中的所有 K 近邻下标
  • 文化馆网站建设情况在微信上做彩票网站有哪些
  • 网站301怎么做企业法治建设工作计划
  • list模拟实现(简单版)【C++】
  • 烟台网站建设哪家好呢维护一个网站需要多少钱
  • 什么网站做视频最赚钱wordpress无法使用ajax
  • 对接MCP服务之sse/streamable-http模式
  • springMVC中/*与/**匹配的区别
  • 如何快速学习一个网络协议?
  • 从安装到上手实战——Docker 基础命令全解析
  • 虚拟机怎么做网站昆明seo技术培训
  • 免费dede企业网站模板wordpress qa
  • autodl 安装modelscope OCR 模型 dots_ocr 笔记心得
  • Linux中文件目录结构介绍以及对目录的操作
  • 大庆建设工程交易中心网站唐山建设信息网站
  • 第8章:扩展边界:技术之外的视野(2)
  • Java面向对象练习:Person类继承与排序