
Python在某些情况下会自动进行类型转换,以保证运算的顺利进行。
# 整数和浮点数运算时自动转换为浮点数
result1 = 3 + 4.5 # result1 = 7.5
# 不同数值类型比较时的自动转换
result2 = 3 == 3.0 # result2 = True
# 布尔值与数值运算
result3 = True + 1 # result3 = 2 (True被转换为1)
result4 = False + 1 # result4 = 1 (False被转换为0)常用的类型转换函数及其特殊情况处理。
# 1. 转换为整数 int()
print(int(3.14)) # 输出: 3(截断小数部分)
print(int("123")) # 输出: 123
print(int(True)) # 输出: 1
print(int(False)) # 输出: 0
# 注意:无法直接将含非数字字符的字符串转换为整数
try:
print(int("12.34")) # 错误:含小数点
except ValueError as e:
print(f"转换错误:{e}")
# 2. 转换为浮点数 float()
print(float(3)) # 输出: 3.0
print(float("3.14")) # 输出: 3.14
print(float("inf")) # 输出: inf(无穷大)
print(float("-inf")) # 输出: -inf(负无穷大)
# 3. 转换为字符串 str()
print(str(123)) # 输出: "123"
print(str(3.14)) # 输出: "3.14"
print(str([1,2,3])) # 输出: "[1, 2, 3]"
# 4. 转换为布尔值 bool()
# 以下值会被转换为False
print(bool(0)) # False
print(bool("")) # False(空字符串)
print(bool([])) # False(空列表)
print(bool({})) # False(空字典)
print(bool(None)) # False
# 其他值都会被转换为True
print(bool(1)) # True
print(bool("hello")) # True
print(bool([1,2])) # True
# 5. 复杂类型转换示例
# 列表转换
print(list("hello")) # 输出: ['h', 'e', 'l', 'l', 'o']
print(list((1,2,3))) # 输出: [1, 2, 3]
# 元组转换
print(tuple([1,2,3])) # 输出: (1, 2, 3)
print(tuple("hello")) # 输出: ('h', 'e', 'l', 'l', 'o')
# 集合转换(自动去重)
print(set([1,2,2,3,3])) # 输出: {1, 2, 3}
print(set("hello")) # 输出: {'h', 'e', 'l', 'o'}# 基本算术运算符示例
a, b = 10, 3
# 1. 加法运算符 (+)
print(f"加法: {a} + {b} = {a + b}") # 输出: 13
# 2. 减法运算符 (-)
print(f"减法: {a} - {b} = {a - b}") # 输出: 7
# 3. 乘法运算符 (*)
print(f"乘法: {a} * {b} = {a * b}") # 输出: 30
# 4. 除法运算符 (/)
print(f"除法: {a} / {b} = {a / b}") # 输出: 3.3333... (总是返回浮点数)
# 5. 整除运算符 (//)
print(f"整除: {a} // {b} = {a // b}") # 输出: 3
# 6. 取模运算符 (%)
print(f"取模: {a} % {b} = {a % b}") # 输出: 1
# 7. 幂运算符 (**)
print(f"幂运算: {a} ** {b} = {a ** b}") # 输出: 1000# 1. 除数为零的处理
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"错误:{e}") # 输出: division by zero
# 2. 浮点数精度问题
print(0.1 + 0.2) # 输出: 0.30000000000000004
# 使用decimal模块处理精确decimal计算
'''
decimal模块提供了Decimal类,用于进行精确的十进制数学计算。它特别适用于:
1. 金融计算:需要精确表示货币金额
2. 科学计算:需要控制精度和舍入行为
3. 任何不允许有舍入误差的场景
'''
# 1. 基本使用
from decimal import Decimal, getcontext
print(Decimal('0.1') + Decimal('0.2')) # 输出: 0.3
# 2. 精度控制
getcontext().prec = 4 # 设置全局精度为4位
result = Decimal('1') / Decimal('3')
print(f"1/3 (精度4位): {result}") # 输出: 0.3333
# 3. 不同的舍入模式
from decimal import ROUND_HALF_UP, ROUND_DOWN
getcontext().rounding = ROUND_HALF_UP # 设置舍入模式为四舍五入
# 4. 金融计算示例
def calculate_interest(principal, rate, years):
"""计算单利"""
p = Decimal(str(principal))
r = Decimal(str(rate))
t = Decimal(str(years))
interest = p * r * t
return interest.quantize(Decimal('0.01')) # 保留两位小数
print(f"利息: {calculate_interest(1000, 0.05, 2)}") # 输出: 100.00
# 5. 科学计算示例
def calculate_circle_area(radius):
"""计算圆的面积,精确到小数点后4位"""
pi = Decimal('3.1415926535')
r = Decimal(str(radius))
area = pi * r * r
return area.quantize(Decimal('0.0001'))
print(f"圆面积: {calculate_circle_area(2)}") # 输出: 12.5664
# 3. 大数运算
big_num = 2 ** 100
print(f"2的100次方: {big_num}") # Python自动处理大数
# 4. 复数运算
z1 = 3 + 4j
z2 = 2 + 3j
print(f"复数加法: {z1 + z2}") # 输出: (5+7j)
print(f"复数乘法: {z1 * z2}") # 输出: (-6+17j)# 1. 基本赋值运算符 (=)
x = 10
# 2. 复合赋值运算符
x += 5 # 等同于 x = x + 5
print(f"加法赋值后:{x}") # 输出: 15
x -= 3 # 等同于 x = x - 3
print(f"减法赋值后:{x}") # 输出: 12
x *= 2 # 等同于 x = x * 2
print(f"乘法赋值后:{x}") # 输出: 24
x /= 4 # 等同于 x = x / 4
print(f"除法赋值后:{x}") # 输出: 6.0
x //= 2 # 等同于 x = x // 2
print(f"整除赋值后:{x}") # 输出: 3.0
x %= 2 # 等同于 x = x % 2
print(f"取模赋值后:{x}") # 输出: 1.0
# 3. 多重赋值
a, b = 1, 2 # 同时给多个变量赋值
print(f"a = {a}, b = {b}") # 输出: a = 1, b = 2
# 4. 变量值交换
a, b = b, a # 不需要临时变量
print(f"交换后:a = {a}, b = {b}") # 输出: a = 2, b = 1# 位运算符示例
a = 60 # 二进制:0011 1100
b = 13 # 二进制:0000 1101
# 1. 按位与运算 (&)
print(f"a & b = {a & b}") # 输出: 12 (0000 1100)
# 2. 按位或运算 (|)
print(f"a | b = {a | b}") # 输出: 61 (0011 1101)
# 3. 按位异或运算 (^)
print(f"a ^ b = {a ^ b}") # 输出: 49 (0011 0001)
# 4. 按位取反运算 (~)
print(f"~a = {~a}") # 输出: -61
# 5. 左移运算 (<<)
print(f"a << 2 = {a << 2}") # 输出: 240 (1111 0000)
# 6. 右移运算 (>>)
print(f"a >> 2 = {a >> 2}") # 输出: 15 (0000 1111)# 1. 判断奇偶性
def is_even(n):
return n & 1 == 0 # 如果最后一位是0,则为偶数
print(f"4是偶数:{is_even(4)}") # True
print(f"5是偶数:{is_even(5)}") # False
# 2. 交换两个数
def swap_bits(a, b):
a = a ^ b
b = a ^ b
a = a ^ b
return a, b
x, y = 10, 20
x, y = swap_bits(x, y)
print(f"交换后:x = {x}, y = {y}") # x = 20, y = 10
# 3. 设置标志位(权限控制)
class Permissions:
READ = 4 # 100
WRITE = 2 # 010
EXEC = 1 # 001
def __init__(self):
self.permissions = 0
def add_permission(self, permission):
self.permissions |= permission
def remove_permission(self, permission):
self.permissions &= ~permission
def has_permission(self, permission):
return self.permissions & permission == permission
# 使用示例
p = Permissions()
p.add_permission(Permissions.READ | Permissions.WRITE) # 设置读写权限
print(f"有读权限:{p.has_permission(Permissions.READ)}") # True
print(f"有写权限:{p.has_permission(Permissions.WRITE)}") # True
print(f"有执行权限:{p.has_permission(Permissions.EXEC)}") # False