# 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 自舉