Python第五章 数据类型

python第五章 数据类型

【说明】本章只讲解数据类型,置于数据类型相关的操作在第四章 基础语法中介绍了

5.1 字符串

5.1.1 字符串的表示

字符串有3种不同的定义方式:

  1. 双引号定义法:"字符串"
  2. 单引号定义法:'字符串'
  3. 三引号定义法(多行字符串): """多行字符串"""
str1 = 'hello, world1'
str2 = "hello, world2"
str3 = """
    hello,
    world3
"""
print(str1)
print(str2)
print(str3)

【规范】单引号包围的也是字符串,不过一般常用双引号,这样比较规范

5.1.2 字符串拼接

1、字符串字面量之间的拼接

# 1. 两个字符串字面量拼接
print("str1 " + "str2")  # str1 str2

2、字符串字面量和字符串变量之间拼接

# 2. 字符串字面量和字符串变量拼接
str_val = "str3"
print(str_val + " str4")  # str3 str4

【注意】字符串无法和非字符串变量进行拼接,这和Java是不一样的

int_val = 123
print("int = " + int_val)

错误:TypeError: can only concatenate str (not "int") to str

当然可以类型转换之后进行拼接

int_val = 123
print("int = " + str(int_val))  # int = 123

拼接字符串的缺点

  1. 变量过多,拼接字符串太麻烦
  2. 字符串无法和数字或者其他类型完成拼接

因此引出下面的字符串格式化

5.1.3 字符串格式化

字符串格式化有两种方式

  1. 语法1:"占位符" % val
  2. 语法2:f"字符串{val}"

下面逐一展示


(1) "占位符" % val

语法1

"占位符" % val

常用的占位符

格式符号 转化
%s 将内容转换成字符串,放入占位位置
%d 将内容转换成整数,放入占位位置
%f 将内容转换成浮点型,放入占位位置

1、一个占位符,不需要()

name = "张三"
desc = "我的名字是%s" % name
print(desc) # 我的名字是张三

2、多个占位符用()围住变量

name = "张三"
age = 14
weight = 59.5
desc = "我的名字是%s,我的年龄是%d,我的体重是%f" % (name, age, weight)  
# 我的名字是张三,我的年龄是14,我的体重是59.500000
print(desc)

【说明】

  1. 任何类型都可以使用%s占位符,都会将原类型转换成字符串
  2. 浮点数转换默认精度6位小数
精度控制

这种语法可以精度控制

我们可以使用辅助符号"m.n"来控制数据的宽度和精度

  • m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
  • .n,控制小数点精度,要求是数字,会进行小数的四舍五入

示例:

  • %5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽度。

  • %5.2f:表示将宽度控制为5,将小数点精度设置为2

    小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f 后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为 .35

  • %.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35

num1 = 11
num2 = 12.345
print("数字11宽度限制5,结果:%5d" % num1)                     #  数字11宽度限制5,结果:   11
print("数字11宽度限制1,结果:%1d" % num1)                     #  数字11宽度限制1,结果:11
print("数字12.345宽度限制7,小数精度2,结果:%7.2d" % num2)     #  数字12.345宽度限制7,小数精度2,结果:     12
print("数字12.345不限制宽度,小数精度2,结果:%.2d" % num2)     #   数字12.345不限制宽度,小数精度2,结果:12

【说明】设置了宽度之后,超出宽度的小数就不显示了

(2) f"字符串{val}"

特点:不限数据类型不做精度控制,适用于快速格式化字符串

f"{变量} {变量}"的方式进行快速格式化

name = "张三"
age = 14
weight = 59.5
print(f"我的名字是{name},我的年龄是{age}, 我的体重是{weight}kg") 
# 我的名字是张三,我的年龄是14, 我的体重是59.5kg

除了对上面的变量进行格式化,还可以对表达式进行格式化

【概念】表达式:一条具有明确执行结果的代码语句,一般=右边的都可以是表达式,比如字面量,算式,有返回值的方法等

print(f"我的年龄是{12}, 我的体重是{59 + 0.5}kg") # 我的年龄是12, 我的体重是59.5kg

在无需使用变量进行数据存储的时候,可以直接格式化表达式,简化代码


下面是一个练习

输入基本信息,然后格式化字符串,最后的数值要保留小数

name = "company1"
stock_price = 19.99
stock_code = 123456
stock_price_daily_growth_factor = 1.2
growth_days = 7
desc = f"""公司:{name}, 股票代码:{stock_code}, 当前股价:{stock_price}
每日增长系数:{stock_price_daily_growth_factor}, 经过{growth_days}天的增长后,股价达到了:{"%.2f" % (stock_price * (stock_price_daily_growth_factor ** growth_days))}
"""
print(desc)

# 公司:company1, 股票代码:123456, 当前股价:19.99
# 每日增长系数:1.2, 经过7天的增长后,股价达到了:71.62

5.2 bool类型

  • True表示真
  • False表示假

True本质上是一个数字记作1,False记作0

bool_val1 = True
bool_val2 = False
print(bool_val1, type(bool_val1))     # True <class 'bool'>
print(bool_val2, type(bool_val2))     # False <class 'bool'>

字符串的比较

print("str1" == "str2")   # False
print("str1" == "str1")   # True

【说明】字符串的比较是直接比较值的

5.3 None类型

【None类型的应用场景】

1、用在if判断上

  • 在if判断中,None等同于False
  • 一般用于在函数中主动返回None,配合if判断做相关处理
def is_mature(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None


result = is_mature(12)

# 如果result不是True的话,表明是未成年
if not result:
    print("未成年,不可以进入")

【说明】None相当于False,not None就是True的意思

2、用于声明无内容的变量上

定义变量,但暂时不需要变量有具体值,可以用None来代替

name = None
posted @ 2023-10-07 11:34  Crispy·Candy  阅读(9)  评论(0编辑  收藏  举报