字符串、整型与浮点类型

浏览 1028

课文

## 字符串的索引 我们在之前已经接触过字符串,它在 python 是`str`类型。现在让我我们来更深入地了解一下。 一个字符串是一系列字符的组合,因此我们可以通过`方括号`操作符号加上序号来获取单个字符。 ```python words = '小明爱吃瓜' print(words[1]) ``` ```output 明 ``` 咦,第一个字符不是`小`吗?为什么这里打印了`明`,我的 python 坏掉了吗? 你的 python 没有坏掉,因为在绝大多数包括 python 的程序语言中,计数都是从 `0` 开始的。 ![image](https://qiniu.3yya.com/5a7554571335ae63f8f714ca244c5bcb/5a7554571335ae63f8f714ca244c5bcb.png) 这意味着我们使用序号`0`才能拿到`小`字。 ```python words = '小明爱吃瓜' print(words[1]) ``` ```output 明 ``` 我们取最后一个字符岂不是要先数下字符串有多少个字符,如果字符串是一篇论文,我们不是要数到脑壳疼? 这样子的话让 python 帮我们数吧,内建的`len`函数可以帮我们数出字符串的长度。由于序号从 0 开始,长度减 1 就是我们最后一个字符的序号。 ```python words = '小明爱吃瓜' length = len(words) print('长度:', length) print('最后一个元素是:', words[length-1]) ``` ```output 长度: 5 最后一个元素是: 瓜 ``` 拿最后一个字符除了数长度之外我们还有更好的办法,就是用 `-1` 作为序号。 因为 python 里同时有另一种取值方式,那就是 -1 作为最后一个元素的序号,往前逐个递减。 ![image](https://qiniu.3yya.com/cf808d40162b3244ad857cef2ac25cd9/cf808d40162b3244ad857cef2ac25cd9.png) ```python words = '小明爱吃瓜' print('最后一个元素是:', words[-1]) ``` ```output 最后一个元素是: 瓜 ``` ## 字符串切片 字符串中的一部分叫作切片,例如`"爱吃"`相对于`"小明爱吃瓜"`。我们同样可以用方括号操作符去获取字符串的切片, 获取方式为 `[a:b]`。其中 `a` 为起始序号,`b` 为结束序号。 注意的是获取的切片包含 `a` 不包含 `b`。 例如要获取`"爱吃"`。 ```python words = '小明爱吃瓜' sliced = words[2:4] print(sliced) ``` ```output 爱吃 ``` 当我们将 `a` 置为空时,切片结果为 `b` 之前不包含 `b`的所有字符。当我们将 `b`置为空时,切片的结果就为 `a` 之后并包含 `a` 的所有字符。 ```python words = '小明爱吃瓜' print(words[:4]) print(words[2:]) ``` ```output 小明爱吃 爱吃瓜 ``` 当 `a` 等于 `b` 时返回结果为空字符串,当 `a` 与 `b` 都置空时返回当前字符串的拷贝对象。 ```python words = '小明爱吃瓜' print(words[2:2]) print(words[:]) ``` 输出 ```output 小明爱吃瓜 ``` ## in 操作符 `in` 操作符可以左右各接收一个字符串,判断左边的字符串是否被包含在右边的字符串中,返回结果是一个 `bool` 对象。 ```python words = '小明爱吃瓜' print('小明' in words) print('小红' in words) ``` 输出 ```output True False ``` ## 字符串相关函数 我们依旧可以用`dir`查看字符串中有哪些可用的函数,并且使用 `help` 查看其帮助文档。 ```python words = '小明爱吃瓜' print(dir(words)) print(help(words.upper)) ``` ```output ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] Help on built-in function upper: upper() method of builtins.str instance Return a copy of the string converted to uppercase. ``` 我们介绍几个常用的方法。首先是`upper`,将字符串的字母转换成大写。 ```python words = 'happy' print(words.upper()) ``` ```output HAPPY ``` 很显示,对应的 `lower` 就是小写。 ```python words = 'HAPPY' print(words.lower()) ``` ```output happy ``` `isdigit` 的用法是判断字符串是否是书面意思上的数字。 ```python words = '10' print(words.isdigit()) words = '10ab' print(words.isdigit()) help(str.isdigit) ``` ```output True False Help on method_descriptor: isdigit(self, /) Return True if the string is a digit string, False otherwise. A string is a digit string if all characters in the string are digits and there is at least one character in the string. ``` 很多内置函数的学习可以用 `help` 函数去查看和了解。建议同学们可以经常使用,这里就不过多赘述了。 ## 字符串的格式化 python 中格式化字符串的方法挺多,而且很多都大同小异,可以按照自己的习惯来选择性掌握。 ### % 格式符 ```python result = '%s同学,现在已经%d点了。' % ('小明', 10) print(result) ``` ```output 小明同学,现在已经10点了。 ``` 这种方法是在字符串中置入占位符也就是 `%类型码` ,然后用 `%` 格式符号接一个元组的形式完成格式化,元组的长度应该与字符串中的 `%类型码` 的数量一致,此时会按顺序替换字符串中的占位符。 以下列出几种常用的类型码: - %s:字符串 - %c:单个字符 - %b:二进制整数 - %o:八进制整数 - %d:十进制整数 - %x:十六进制整数 - %f:浮点数 - %%:输出 `%` 本身 有关类型码有很多高阶的写法,在入门阶段不宜过多深入介绍,可以参考文档 [`https://docs.python.org/zh-cn/3/library/string.html`](https://docs.python.org/zh-cn/3/library/string.html) 比如日常需要随机一个4位的数字验证码,当随机出来的数字不足4位时,则需要在前面补 0,用类型码则可以很方便地实现。 ```python # 随机字符串 ran_1 = 12 # 随机字符串 ran_2 = 456 print('您的注册验证码是:%04d' % ran_1) print('您的登录验证码是:%(ran)04d' % {'ran': ran_2}) ``` ```output 您的注册验证码是:0012 您的登录验证码是:0456 ``` 当然我们也可以用字典,来使用字符串格式化更形象。 ```python result = '%(name)s同学,现在已经%(hour)d点了。' % {'hour': 10, 'name': '小明'} print(result) ``` ```output 小明同学,现在已经10点了。 ``` ### format 方法 format 与 % 格式符挺类似,不过在使用上显得更规范。 首先是顺序格式化的方式。 ```python result = '{}同学,现在已经{}点了。'.format('小明', 10) print(result) ``` ```output 小明同学,现在已经10点了。 ``` 或者通过 `{索引}` 的形式。 ```python result = '{0}同学,现在已经{1}点了。是吧{0}同学?'.format('小明', 10) print(result) ``` ```output 小明同学,现在已经10点了。是吧小明同学? ``` 当然类型码与格式化也是不可少的。 ```python # 随机字符串 ran_1 = 12 # 随机字符串 ran_2 = 456 print('您的注册验证码是:{:04d}'.format(ran_1)) print('您的登录验证码是:{ran:04d}'.format(ran=ran_2)) ``` ```output 您的注册验证码是:0012 您的登录验证码是:0456 ``` ### 字符串插值 使用插值的方式可以使代码更简洁,可以使我们直接在字符串中插入变量或表达式。 ```python # 随机字符串 ran_1 = 12 # 随机字符串 ran_2 = 400 print(f'您的注册验证码是:{ran_1:04d}') print(f'您的登录验证码是:{ran_2 + 66 :04d}') ``` ```output 您的注册验证码是:0012 您的登录验证码是:0466 ``` ### Template类 Template 与 format 有点类似。 ```python from string import Template template = Template('${name}同学,现在已经${hour}点了。') print(template.substitute(name='小明', hour='10')) ``` ```output 小明同学,现在已经10点了。 ``` ## 数字类型 常见的数字类型包括 `int`(整型)和 `float` (浮点型)。在之前我们已经用 `str` 类型来表示我们生活中的一些常见内容了,比如姓名、地址、小说等我们都用 `str` 类型进行保存。 我们还需要一些类型,来表示我们的体重、年龄、商品的价格等数据,并且能对他们进行数学上的运算。这时就需要`int` 和 `float`类型。为什么需要定义两种类型呢? 因为对于 `int`(整型)的数据,它可以用来表达次数的概念。我去了两次北京,而不能说我去了 2.5 次北京。因此在使用上整数与带小数的数字必须有所区分,所以把数字分成 `int` 与 `float`两个类型。 ### int 整型 当我们给变量赋值一个不带小数点的数字时,这个变量就默认为`int`(整型)。 ```python n = 12 print(type(n)) ``` ```output <class 'int'> ``` 注意,两个整型经过除法运算后,不管结果是不是意义上的整数,其都为 `float` (浮点型)。 ```python n = 4 / 2 print(type(n)) ``` ```output <class 'float'> ``` 有个整除运算符 `//` 能只保留整数部分,并且返回 `int` 类型。 ```python n = 5 // 2 print(n) print(type(n)) ``` ```output 2 <class 'int'> ``` 很多时候我们接收用户输入的数字时,返回的是一个字符串类型。 比如 ```python n = input('请输入数字:') print(n / 2) ``` ```output 请输入数字:6 TypeError: unsupported operand type(s) for /: 'str' and 'int' ``` 此时是无法进行数学运算的, 必须得先用 `int()` 方法将其进行类型转换。 ```python n = input('请输入数字:') n = int(n) print(n / 2) ``` ```output 请输入数字:6 3 ``` ### float 浮点型 一个数字只有带有 `.` 都为浮点型。 ```python f1 = 1.5 f2 = 1. f3 = .5 print(f1, type(f1)) print(f2, type(f2)) print(f3, type(f3)) ``` ```output 1.5 <class 'float'> 1.0 <class 'float'> 0.5 <class 'float'> ``` 同理我们接收用户输入的浮点类型时,也必须先用 `float()` 进行类型转换。 ```python f = input('请输入小数:') f = float(f) print(f * 2) ``` ```output 请输入小数:12.2 24.4 ```

实战

1.定义姓名、年龄、身高三个变量来保存关于你自身的数据,你能说出他们分别属于什么类型吗? 2.打印出你姓名中的姓,假设你是`慕容XX`复姓的话又该如何?

解析

1.定义姓名、年龄、身高三个变量来保存关于你自身的数据,你能说出他们分别属于什么类型吗? ```python name = '小明' age = 18 height = 1.8 print('name 的类型是:', type(name)) print('age 的类型是:', type(age)) print('height 的类型是:', type(height)) ``` ```output name 的类型是: <class 'str'> age 的类型是: <class 'int'> height 的类型是: <class 'float'> ``` 2.打印出你姓名中的姓,假设你是`慕容XX`复姓的话又该如何? ```python name = '王小明' print('姓:', name[0]) name = '慕容小明' print('姓:', name[:2]) ``` ```output 姓: 王 姓: 慕容 ```
点击查看

评论

登录参与讨论

04-05

回复

西瓜lalavilaxxww

04-06

回复

共 2 条
  • 1
前往
  • 1