# 變量的基本使用
> **程序就是用來處理數據的,而變量就是用來存儲數據的**
## 目標
* 變量定義
* 變量的類型
* 變量的命名
## 01. 變量定義
* 在 Python 中,每個變量 **在使用前都必須賦值**,變量 **賦值以后** 該變量 **才會被創建**
* 等號(=)用來給變量賦值
* `=` 左邊是一個變量名
* `=` 右邊是存儲在變量中的值
```python
變量名 = 值
```
> 變量定義之后,后續就可以直接使用了
### 1) 變量演練1 —— iPython
```python
# 定義 qq_number 的變量用來保存 qq 號碼
In [1]: qq_number = "1234567"
# 輸出 qq_number 中保存的內容
In [2]: qq_number
Out[2]: '1234567'
# 定義 qq_password 的變量用來保存 qq 密碼
In [3]: qq_password = "123"
# 輸出 qq_password 中保存的內容
In [4]: qq_password
Out[4]: '123'
```
> 使用交互式方式,如果要查看變量內容,直接輸入變量名即可,不需要使用 `print` 函數
### 2) 變量演練 2 —— PyCharm
```python
# 定義 qq 號碼變量
qq_number = "1234567"
# 定義 qq 密碼變量
qq_password = "123"
# 在程序中,如果要輸出變量的內容,需要使用 print 函數
print(qq_number)
print(qq_password)
```
> 使用解釋器執行,如果要輸出變量的內容,必須要要使用 `print` 函數
### 3) 變量演練 3 —— 超市買蘋果
> * 可以用 **其他變量的計算結果** 來定義變量
> * 變量定義之后,后續就可以直接使用了
**需求**
* 蘋果的價格是 **8.5 元/斤**
* 買了 **7.5 斤** 蘋果
* 計算付款金額
```python
# 定義蘋果價格變量
price = 8.5
# 定義購買重量
weight = 7.5
# 計算金額
money = price * weight
print(money)
```
#### 思考題
* 如果 **只要買蘋果,就返 5 塊錢**
* 請重新計算購買金額
```python
# 定義蘋果價格變量
price = 8.5
# 定義購買重量
weight = 7.5
# 計算金額
money = price * weight
# 只要買蘋果就返 5 元
money = money - 5
print(money)
```
**提問**
* 上述代碼中,一共定義有幾個變量?
* 三個:`price`/`weight`/`money`
* `money = money - 5` 是在定義新的變量還是在使用變量?
* 直接使用之前已經定義的變量
* 變量名 只有在 **第一次出現** 才是 **定義變量**
* 變量名 再次出現,不是定義變量,而是直接使用之前定義過的變量
* 在程序開發中,可以修改之前定義變量中保存的值嗎?
* 可以
* 變量中存儲的值,就是可以 **變** 的
## 02. 變量的類型
* 在內存中創建一個變量,會包括:
1. 變量的名稱
2. 變量保存的數據
3. 變量存儲數據的類型
4. 變量的地址(標示)
### 2.1 變量類型的演練 —— 個人信息
**需求**
* 定義變量保存小明的個人信息
* 姓名:**小明**
* 年齡:**18** 歲
* 性別:**是**男生
* 身高:**1.75** 米
* 體重:**75.0** 公斤
> 利用 **單步調試** 確認變量中保存數據的類型
**提問**
1. 在演練中,一共有幾種數據類型?
* 4 種
* `str` —— 字符串
* `bool` —— 布爾(真假)
* `int` —— 整數
* `float` —— 浮點數(小數)
2. 在 `Python` 中定義變量時需要指定類型嗎?
* 不需要
* `Python` 可以根據 `=` 等號右側的值,自動推導出變量中存儲數據的類型
### 2.2 變量的類型
* 在 `Python` 中定義變量是 **不需要指定類型**(在其他很多高級語言中都需要)
* 數據類型可以分為 **數字型** 和 **非數字型**
* 數字型
* 整型 (`int`)
* 浮點型(`float`)
* 布爾型(`bool`)
* 真 `True` `非 0 數` —— **非零即真**
* 假 `False` `0`
* 復數型 (`complex`)
* 主要用于科學計算,例如:平面場問題、波動問題、電感電容等問題
* 非數字型
* 字符串
* 列表
* 元組
* 字典
> 提示:在 Python 2.x 中,**整數** 根據保存數值的長度還分為:
> * `int`(整數)
> * `long`(長整數)
* 使用 `type` 函數可以查看一個變量的類型
```python
In [1]: type(name)
```
### 2.3 不同類型變量之間的計算
#### 1) **數字型變量** 之間可以直接計算
* 在 Python 中,兩個數字型變量是可以直接進行 算數運算的
* 如果變量是 `bool` 型,在計算時
* `True` 對應的數字是 `1`
* `False` 對應的數字是 `0`
**演練步驟**
1. 定義整數 `i = 10`
2. 定義浮點數 `f = 10.5`
3. 定義布爾型 `b = True`
* 在 iPython 中,使用上述三個變量相互進行算術運算
#### 2) **字符串變量** 之間使用 `+` 拼接字符串
* 在 Python 中,字符串之間可以使用 `+` 拼接生成新的字符串
```python
In [1]: first_name = "三"
In [2]: last_name = "張"
In [3]: first_name + last_name
Out[3]: '三張'
```
#### 3) **字符串變量** 可以和 **整數** 使用 `*` 重復拼接相同的字符串
```python
In [1]: "-" * 50
Out[1]: '--------------------------------------------------'
```
#### 4) **數字型變量** 和 **字符串** 之間 **不能進行其他計算**
```python
In [1]: first_name = "zhang"
In [2]: x = 10
In [3]: x + first_name
---------------------------------------------------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
類型錯誤:`+` 不支持的操作類型:`int` 和 `str`
```
### 2.4 變量的輸入
* 所謂 **輸入**,就是 **用代碼** **獲取** 用戶通過 **鍵盤** 輸入的信息
* 例如:去銀行取錢,在 ATM 上輸入密碼
* 在 Python 中,如果要獲取用戶在 **鍵盤** 上的輸入信息,需要使用到 `input` 函數
#### 1) 關于函數
* 一個 **提前準備好的功能**(別人或者自己寫的代碼),**可以直接使用**,而 **不用關心內部的細節**
* 目前已經學習過的函數
| 函數 | 說明 |
| --- | --- |
| print(x) | 將 x 輸出到控制臺 |
| type(x) | 查看 x 的變量類型 |
#### 2) input 函數實現鍵盤輸入
* 在 Python 中可以使用 `input` 函數從鍵盤等待用戶的輸入
* 用戶輸入的 **任何內容** Python 都認為是一個 **字符串**
* 語法如下:
```python
字符串變量 = input("提示信息:")
```
#### 3) 類型轉換函數
| 函數 | 說明 |
| --- | --- |
| int(x) | 將 x 轉換為一個整數 |
| float(x) | 將 x 轉換到一個浮點數 |
#### 4) 變量輸入演練 —— 超市買蘋果增強版
**需求**
* **收銀員輸入** 蘋果的價格,單位:**元/斤**
* **收銀員輸入** 用戶購買蘋果的重量,單位:**斤**
* 計算并且 **輸出** 付款金額
##### 演練方式 1
```python
# 1. 輸入蘋果單價
price_str = input("請輸入蘋果價格:")
# 2. 要求蘋果重量
weight_str = input("請輸入蘋果重量:")
# 3. 計算金額
# 1> 將蘋果單價轉換成小數
price = float(price_str)
# 2> 將蘋果重量轉換成小數
weight = float(weight_str)
# 3> 計算付款金額
money = price * weight
print(money)
```
**提問**
1. 演練中,針對 **價格** 定義了幾個變量?
* **兩個**
* `price_str` 記錄用戶輸入的價格字符串
* `price` 記錄轉換后的價格數值
2. **思考** —— 如果開發中,需要用戶通過控制臺 輸入 **很多個 數字**,針對每一個數字都要定義兩個變量,**方便嗎**?
##### 演練方式 2 —— 買蘋果改進版
1. **定義** 一個 **浮點變量** 接收用戶輸入的同時,就使用 `float` 函數進行轉換
```python
price = float(input("請輸入價格:"))
```
* 改進后的好處:
1. 節約空間,只需要為一個變量分配空間
2. 起名字方便,不需要為中間變量起名字
* 改進后的“缺點”:
1. 初學者需要知道,兩個函數能夠嵌套使用,稍微有一些難度
**提示**
* 如果輸入的不是一個數字,程序執行時會出錯,有關數據轉換的高級話題,后續會講!
### 2.5 變量的格式化輸出
> 蘋果單價 `9.00` 元/斤,購買了 `5.00` 斤,需要支付 `45.00` 元
* 在 Python 中可以使用 `print` 函數將信息輸出到控制臺
* 如果希望輸出文字信息的同時,**一起輸出** **數據**,就需要使用到 **格式化操作符**
* `%` 被稱為 **格式化操作符**,專門用于處理字符串中的格式
* 包含 `%` 的字符串,被稱為 **格式化字符串**
* `%` 和不同的 **字符** 連用,**不同類型的數據** 需要使用 **不同的格式化字符**
| 格式化字符 | 含義 |
| --- | --- |
| %s | 字符串 |
| %d | 有符號十進制整數,`%06d` 表示輸出的整數顯示位數,不足的地方使用 `0` 補全 |
| %f | 浮點數,`%.2f` 表示小數點后只顯示兩位 |
| %% | 輸出 `%` |
* 語法格式如下:
```python
print("格式化字符串" % 變量1)
print("格式化字符串" % (變量1, 變量2...))
```
#### 格式化輸出演練 —— 基本練習
**需求**
1. 定義字符串變量 `name`,輸出 **我的名字叫 小明,請多多關照!**
2. 定義整數變量 `student_no`,輸出 **我的學號是 000001**
3. 定義小數 `price`、`weight`、`money`,輸出 **蘋果單價 9.00 元/斤,購買了 5.00 斤,需要支付 45.00 元**
4. 定義一個小數 `scale`,輸出 **數據比例是 10.00%**
```python
print("我的名字叫 %s,請多多關照!" % name)
print("我的學號是 %06d" % student_no)
print("蘋果單價 %.02f 元/斤,購買 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))
print("數據比例是 %.02f%%" % (scale * 100))
```
#### 課后練習 —— 個人名片
**需求**
* 在控制臺依次提示用戶輸入:**姓名**、**公司**、**職位**、**電話**、**郵箱**
* 按照以下格式輸出:
```
**************************************************
公司名稱
姓名 (職位)
電話:電話
郵箱:郵箱
**************************************************
```
實現代碼如下:
```python
"""
在控制臺依次提示用戶輸入:姓名、公司、職位、電話、電子郵箱
"""
name = input("請輸入姓名:")
company = input("請輸入公司:")
title = input("請輸入職位:")
phone = input("請輸入電話:")
email = input("請輸入郵箱:")
print("*" * 50)
print(company)
print()
print("%s (%s)" % (name, title))
print()
print("電話:%s" % phone)
print("郵箱:%s" % email)
print("*" * 50)
```
- linux基礎
- 01_Python基礎課程安排
- 02_操作系統(科普章節)
- 03_操作系統的發展史(科普章節)
- 04_文件和目錄(理解)
- 05_Ubuntu圖形界面入門
- 06_常用Linux命令的基本使用
- 07_Linux終端命令格式
- 08_文件和目錄常用命令
- 09_遠程管理常用命令
- 10_用戶權限相關命令
- 11_系統信息相關命令
- 12_其他命令
- python基礎
- 01_認識 Python
- 02_第一個Python 程序
- 03_PyCharm的初始設置(知道)
- 04_多文件項目的演練
- 05_注釋
- 06_算數運算符
- 07_程序執行原理(科普)
- 08_變量的基本使用
- 09_變量的命名
- 10_判斷(if)語句
- 11_運算符
- 12_循環
- 13_函數基礎
- 14_高級變量類型
- 15_綜合應用——名片管理系統
- 16_變量進階(理解)
- 17_函數進階.md
- 面向對象
- 01_面向對象(OOP)基本概念
- 02_類和對象
- 03_面向對象基礎語法
- 04_面向對象封裝案例
- 05_面向對象封裝案例 II