# Python 数字和字符串
> 原文: [https://javabeginnerstutorial.com/python-tutorial/python-numbers-and-strings-2/](https://javabeginnerstutorial.com/python-tutorial/python-numbers-and-strings-2/)
在本文中,我们将介绍 Python 3 数字和字符串,因为它们是使用 Python 开发的基础。
## Python 3 数字
您可能已经想到,数字数据类型存储数字值,例如整数和浮点数。 尽管您应该了解数字的另一种类型:*复数*。 让我们简要看一下这三种数字。
* 整数(也称为整数)是没有小数点的整数,可以包含正数或负数。 只要您希望提供良好的计算可能性,整数就可以。
* 浮点数是浮点数,这意味着即使它们是整数,它们也包含一个小数点。 它们涵盖了一组实数,因此您可以对其进行任何操作。
* 大多数情况下,复数出于科学目的。 但是很高兴知道还有更多东西。 您可能从数学上知道复数表示为`+ bi`,其中`i`是表示 -1 的平方根的虚部。 **但是在 Python** 中,虚部表示为`j`,因此,如果要编写复数,则应执行:`c = 42 + 26j`。
### 特殊数字
您也可以在 Python 中使用两个常用的数字(至少在数学上是如此)。 这些数字是`pi`和`e`。 要使用它们,您必须导入数学模块:
```py
>>> import math
>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045
```
### 随机数
在一些书籍或教程的帮助下开始开发时,您会遇到随机数生成的问题。 稍后我们将使用随机数。 但是,现在是使用 Python 引入随机数生成的好时机。
为此,我们必须导入一个模块:`random`。
```py
>>> import random
>>> random.choice((1,2,3,4,'a')) # chooses one item of the provided list, tuple or string (it has to be an idexable object)
2
>>> random.random() # returns a random floating point number which is greater or equal to `0` and less than `1`
0.17489302862620337
>>> l = [1,2,3,4,5]
>>> >>> random.shuffle(l) # shuffles the list in place, returns `None`
>>> l
[1, 4, 3, 2, 5]
>>> random.randrange(1,10) # selects a random integer between the range of the first and the second parameter
4
>>> random.randrange(1,10,2) # the third parameter is an optional integer, defines the step in the range to select the elements from
5
```
## 字符串
字符串在 Python 中定义为引号之间表示的字符列表。 我们可以使用单引号(`'`或单引号)或双引号(`"`)来表示字符串。 我们可以在一个字符串中使用另一个字符串,但是如果您使用单引号将字符串开头,则也必须以该字符串结尾。
这些字符串是单行字符串,这意味着您无法将它们分散在多行中,这会导致错误。 但是,在讨论注释时,我们讨论了以三个引号开头的字符串(再次使用单引号或双引号也没有关系)。 它们可以通过多条线传播。 但是,它们会在最后转换为常规字符串,并且在写文本时仅在换行符(`\n`)处按回车符。 这种字符串最常见的用法是文档。 当我们到达函数和类时,我们将讨论这个主题。
让我们举个简单的示例:
```py
>>> "this is a
File "<stdin>", line 1
"this is a
^
SyntaxError: EOL while scanning string literal
>>> 'this is line "
File "<stdin>", line 1 # Starting and ending of String should be done with same type of quote
'this is line "
^
SyntaxError: EOL while scanning string literal
>>> 'this will " work " without any isue'
'this will " work " without any isue'
>>> ''' this is a
... string'''
' this is a\nstring'
```
### 访问和更新字符串
Python 没有*字符*的显式类型,它们被视为长度为 1 的字符串。 访问字符串与访问任何其他变量相同。
不能就地更新字符串,因为字符串在 Python 中是不可变的类型。 如果您“更新”字符串的值,则仅使用新字符串重新分配该值。
```py
>>> s1 = "Hello World!"
>>> id(s1)
4318883504
>>> s1 = "Hello Python!"
>>> id(s1)
4318903344
>>> id('Hello World!')
4318883504
```
### 特殊字符串运算符
因为字符串是 Python 中的类型,被视为某种列表,所以字符串具有特殊的运算符,我们可以将其用于开发目的。 让我们用示例来看看它们。
在下一个小节中将对切片进行详细说明。
* `+`符号将字符串连接起来
* `*`符号创建字符串的多个副本
* `[int]`将字符串中给定位置(`int`)的字符切片
* `[int1:int2]`它获取给定范围内的字符(`int1 – int2`)
* `[::int]`获取给定范围之间的字符,以及字符之间的步长(`int`)
* `in`判断字符串中是否存在子字符串
* `not in`判断字符串中是否不存在子字符串
```py
>>> 'Hello' + ' ' + "Python" # the + sign concatenates the strings
'Hello Python'
>>> 'Hello'+'!' * 5 # the * sign creates multiple copies of the string
'Hello!!!!!'
>>> "Python"[2] # slices the character at the given position out of the string
't'
>>> "Hello World!"[0:5] # gets the characters between the given range
'Hello'
>>> 'Hello World!'[::2] # gets the characters between the given range with the amount of steps between the characters
'HloWrd'
>>> 'llo' in "Hello World!" # looks up if a substring is present in the string
True
>>> "hell" not in 'Hello World!' # looks if a substring is not present in the string
True
```
### 三引号
我已经提到了我对三重引号的看法:它们是多行字符串而不是注释。
多行字符串表示它们与单行(或普通)字符串的打印方式相同,但保留其显式的新行并将特殊的转义字符转换为其打印版本。
```py
>>> spam = """Spam, Spam, Spam, lovely Spam
... Wonderful Spam, Lovely Spam.
... Spam, Spam, Spam, magnificent Spam,
... \tSuperlative Spam.
... Spam, Spam, Spam, wonderous Spam,\nSurgical Spam, splendiferous Spam.
... Eggs, Bacon, sausage!\rSpam, Spam, Spam, Spaaam!"""
>>> spam
'Spam, Spam, Spam, lovely Spam\nWonderful Spam, Lovely Spam.\nSpam, Spam, Spam, magnificent Spam,\n\tSuperlative Spam.\nSpam, Spam, Spam, wonderous Spam,\nSurgical Spam, splendiferous Spam.\nEggs, Bacon, sausage!\rSpam, Spam, Spam, Spaaam!'
>>> print(spam)
Spam, Spam, Spam, lovely Spam
Wonderful Spam, Lovely Spam.
Spam, Spam, Spam, magnificent Spam,
Superlative Spam.
Spam, Spam, Spam, wonderous Spam,
Surgical Spam, splendiferous Spam.
Spam, Spam, Spam, Spaaam!
```
如您所见,当不打印字符串时,他的特殊转义符将保持转义-甚至在创建多行字符串时,我们在添加换行符的地方 Python 都显式显示`\n`。
### 字符串格式化
字符串格式化在 Python 中很酷。 格式有两种版本:带`%`符号(类似于 C 的`printf`方法)和字符串本身的`format()`方法。 但是,在大多数情况下,我将同时介绍这两种版本,第二种版本更好,更易于使用。
让我们直接进入细节。
```py
>>> name = 'Bob'
>>> age = 31
>>> 'My name is %s and I am %d years young!'%(name, age)
'My name is Bob and I am 31 years young!'
>>> 'My name is {} and I am {} years young!'.format(name, age)
'My name is Bob and I am 31 years young!'
>>> 'My name is {0} and I am {1} years young!'.format(name, age)
'My name is Bob and I am 31 years young!'
```
如您所见,两个格式化选项之间没有太大区别。 但是,如果您查看第一个版本,则可以看到变量使用的占位符(`%s`和`%d`)与第二个版本中的占位符不同。
关键是对于`%`格式,您必须告诉参数的类型以根据结果字符串中的格式启用 python。 这也意味着如果要多次打印变量,则必须重复变量。
格式函数与参数索引一起使用,并根据类型确定格式。 因此,您不必明确提及参数的类型。 如果您提供的参数数量与占位符相同,则可以保留参数索引。
```py
>>> 'My name is %s and I am %d years young and I have read %d books!'%(name, age, age)
'My name is Bob and I am 31 years young and I have read 31 books!'
>>> 'My name is {} and I am {} years young and I have read {} books!'.format(name, age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
>>> 'My name is {} and I am {} years young and I have read {} books!'.format(name, age, age)
'My name is Bob and I am 31 years young and I have read 31 books!'
>>> 'My name is {0} and I am {1} years young and I have read {1} books!'.format(name, age)
'My name is Bob and I am 31 years young and I have read 31 books!'
```
取决于您以后使用哪种格式,但是在本系列文章中,我将坚持使用`format`函数。 但是,如果您更喜欢`%`,这里有一些字符以及它们在格式字符串中的作用:
* **`%c`**:字符
* **`%s`**:格式化前通过`str()`进行字符串转换
* **`%i`**:带符号的十进制整数
* **`%d`**:带符号的十进制整数
* **`%u`**:无符号十进制整数
* **`%o`**:弱八进制
* **`%x`**:十六进制整数(小写字母)
* **`%X`**:十六进制整数(大写字母)
* **`%e`**:指数符号(小写的“`e`”)
* **`%E`**:指数表示法(大写的“`E`”)
* **`%f`**:浮点实数
* **`%g`**:`%f`和`%e`中的较短者
* **`%G`**:`%F`和`%E`中的较短者
### 参考文献
* [官方文档](https://docs.python.org/3/library/numbers.html)
- JavaBeginnersTutorial 中文系列教程
- Java 教程
- Java 教程 – 入门
- Java 的历史
- Java 基础知识:Java 入门
- jdk vs jre vs jvm
- public static void main(string args[])说明
- 面向初学者的 Java 类和对象教程
- Java 构造器
- 使用 Eclipse 编写 Hello World 程序
- 执行顺序
- Java 中的访问修饰符
- Java 中的非访问修饰符
- Java 中的数据类型
- Java 中的算术运算符
- Java 语句初学者教程
- 用 Java 创建对象的不同方法
- 内部类
- 字符串构建器
- Java 字符串教程
- Java 教程 – 变量
- Java 中的变量
- Java 中的局部变量
- Java 中的实例变量
- Java 引用变量
- 变量遮盖
- Java 教程 – 循环
- Java for循环
- Java 教程 – 异常
- Java 异常教程
- 异常处理 – try-with-resources语句
- Java 异常处理 – try catch块
- Java 教程 – OOPS 概念
- Java 重载
- Java 方法覆盖
- Java 接口
- 继承
- Java 教程 – 关键字
- Java 中的this关键字
- Java static关键字
- Java 教程 – 集合
- Java 数组教程
- Java 集合
- Java 集合迭代器
- Java Hashmap教程
- 链表
- Java 初学者List集合教程
- Java 初学者的Map集合教程
- Java 初学者的Set教程
- Java 初学者的SortedSet集合教程
- Java 初学者SortedMap集合教程
- Java 教程 – 序列化
- Java 序列化概念和示例
- Java 序列化概念和示例第二部分
- Java 瞬态与静态变量
- serialVersionUID的用途是什么
- Java 教程 – 枚举
- Java 枚举(enum)
- Java 枚举示例
- 核心 Java 教程 – 线程
- Java 线程教程
- Java 8 功能
- Java Lambda:初学者指南
- Lambda 表达式简介
- Java 8 Lambda 列表foreach
- Java 8 Lambda 映射foreach
- Java 9
- Java 9 功能
- Java 10
- Java 10 独特功能
- 核心 Java 教程 – 高级主题
- Java 虚拟机基础
- Java 类加载器
- Java 开发人员必须知道..
- Selenium 教程
- 1 什么是 Selenium?
- 2 为什么要进行自动化测试?
- 3 Selenium 的历史
- 4 Selenium 工具套件
- 5 Selenium 工具支持的浏览器和平台
- 6 Selenium 工具:争霸
- 7A Selenium IDE – 简介,优点和局限性
- 7B Selenium IDE – Selenium IDE 和 Firebug 安装
- 7C Selenium IDE – 突破表面:初探
- 7D Selenium IDE – 了解您的 IDE 功能
- 7E Selenium IDE – 了解您的 IDE 功能(续)。
- 7F Selenium IDE – 命令,目标和值
- 7G Selenium IDE – 记录和运行测试用例
- 7H Selenium IDE – Selenium 命令一览
- 7I Selenium IDE – 设置超时,断点,起点
- 7J Selenium IDE – 调试
- 7K Selenium IDE – 定位元素(按 ID,名称,链接文本)
- 7L Selenium IDE – 定位元素(续)
- 7M Selenium IDE – 断言和验证
- 7N Selenium IDE – 利用 Firebug 的优势
- 7O Selenium IDE – 以所需的语言导出测试用例
- 7P Selenium IDE – 其他功能
- 7Q Selenium IDE – 快速浏览插件
- 7Q Selenium IDE – 暂停和反射
- 8 给新手的惊喜
- 9A WebDriver – 架构及其工作方式
- 9B WebDriver – 在 Eclipse 中设置
- 9C WebDriver – 启动 Firefox 的第一个测试脚本
- 9D WebDriver – 执行测试
- 9E WebDriver – 用于启动其他浏览器的代码示例
- 9F WebDriver – JUnit 环境设置
- 9G WebDriver – 在 JUnit4 中运行 WebDriver 测试
- 9H WebDriver – 隐式等待
- 9I WebDriver – 显式等待
- 9J WebDriver – 定位元素:第 1 部分(按 ID,名称,标签名称)
- 9K WebDriver – 定位元素:第 2 部分(按className,linkText,partialLinkText)
- 9L WebDriver – 定位元素:第 3a 部分(按cssSelector定位)
- 9M WebDriver – 定位元素:第 3b 部分(cssSelector续)
- 9N WebDriver – 定位元素:第 4a 部分(通过 xpath)
- 9O WebDriver – 定位元素:第 4b 部分(XPath 续)
- 9P WebDriver – 节省时间的捷径:定位器验证
- 9Q WebDriver – 处理验证码
- 9R WebDriver – 断言和验证
- 9S WebDriver – 处理文本框和图像
- 9T WebDriver – 处理单选按钮和复选框
- 9U WebDriver – 通过两种方式选择项目(下拉菜单和多项选择)
- 9V WebDriver – 以两种方式处理表
- 9W WebDriver – 遍历表元素
- 9X WebDriver – 处理警报/弹出框
- 9Y WebDriver – 处理多个窗口
- 9Z WebDriver – 最大化窗口
- 9AA WebDriver – 执行 JavaScript 代码
- 9AB WebDriver – 使用动作类
- 9AC WebDriver – 无法轻松定位元素? 继续阅读...
- 10A 高级 WebDriver – 使用 Apache ANT
- 10B 高级 WebDriver – 生成 JUnit 报告
- 10C 高级 WebDriver – JUnit 报表自定义
- 10D 高级 WebDriver – JUnit 报告自定义续
- 10E 高级 WebDriver – 生成 PDF 报告
- 10F 高级 WebDriver – 截屏
- 10G 高级 WebDriver – 将屏幕截图保存到 Word 文档
- 10H 高级 WebDriver – 发送带有附件的电子邮件
- 10I 高级 WebDriver – 使用属性文件
- 10J 高级 WebDriver – 使用 POI 从 excel 读取数据
- 10K 高级 WebDriver – 使用 Log4j 第 1 部分
- 10L 高级 WebDriver – 使用 Log4j 第 2 部分
- 10M 高级 WebDriver – 以无头模式运行测试
- Vue 教程
- 1 使用 Vue.js 的 Hello World
- 2 模板语法和反应式的初探
- 3 Vue 指令简介
- 4 Vue Devtools 设置
- 5 数据绑定第 1 部分(文本,原始 HTML,JavaScript 表达式)
- 6 数据绑定第 2 部分(属性)
- 7 条件渲染第 1 部分(v-if,v-else,v-else-if)
- 8 条件渲染第 2 部分(v-if和v-show)
- 9 渲染列表第 1 部分(遍历数组)
- 10 渲染列表第 2 部分(遍历对象)
- 11 监听 DOM 事件和事件修饰符
- 12 监听键盘和鼠标事件
- 13 让我们使用简写
- 14 使用v-model进行双向数据绑定
- 15 表单输入绑定
- 18 类绑定
- Python 教程
- Python 3 简介
- Python 基础知识 - 又称 Hello World 以及如何实现
- 如何在 Windows 中安装 python
- 适用于 Windows,Mac,Linux 的 Python 设置
- Python 数字和字符串
- Python 列表
- Python 集
- Python 字典
- Python 条件语句
- Python 循环
- Python 函数
- 面向对象编程(OOP)
- Python 中的面向对象编程
- Python 3 中的异常处理
- Python 3:猜数字
- Python 3:猜数字 – 回顾
- Python 生成器
- Hibernate 教程
- Hibernate 框架基础
- Hibernate 4 入门教程
- Hibernate 4 注解配置
- Hibernate 4 的实体关系
- Hibernate 4 中的实体继承模型
- Hibernate 4 查询语言
- Hibernate 4 数据库配置
- Hibernate 4 批处理
- Hibernate 4 缓存
- Hibernate 4 审计
- Hibernate 4 的并发控制
- Hibernate 4 的多租户
- Hibernate 4 连接池
- Hibernate 自举