一 程序與用戶交互
1.1、什么是與用戶交互
用戶交互就是人往計算機中input/輸入數據,計算機print/輸出結果
1.2、為什么要與用戶交互?
為了讓計算機能夠像人一樣與用戶溝通交流
比如,過去我們去銀行取錢,用戶需要把帳號密碼告訴櫃員,而現在,櫃員被ATM機取代,ATM機就是一台計算機,所以用戶同樣需要將帳號密碼告訴計算機,於是我們的程序中必須有相應的機制來控制計算機接收用戶輸入的內容,並且輸出結果
1.3、如何與用戶交互
交互的本質就是輸入、輸出
1.3.1 輸入input:
# 在python3中input功能會等待用戶的輸入,用戶輸入任何內容,都存成字符串類型,然后賦值給等號左邊的變量名
>>> username=input('請輸入您的用戶名:')
請輸入您的用戶名:jack # username = "jack"
>>> password=input('請輸入您的密碼:')
請輸入您的密碼:123 # password = "123"
# 了解知識:
# 1、在python2中存在一個raw_input功能與python3中的input功能一模一樣
# 2、在python2中還存在一個input功能,需要用戶輸入一個明確的數據類型,輸入什么類型就存成什么類型
>>> l=input('輸入什么類型就存成什么類型: ')
輸入什么類型就存成什么類型: [1,2,3]
>>> type(l)
<type 'list'>
1.3.2 輸出print:
>>> print('hello world') # 只輸出一個值
hello world
>>> print('first','second','third') # 一次性輸出多個值,值用逗號隔開
first second third
# 默認print功能有一個end參數,該參數的默認值為"\n"(代表換行),可以將end參數的值改成任意其它字符
print("aaaa",end='')
print("bbbb",end='&')
print("cccc",end='@')
#整體輸出結果為:aaaabbbb&cccc@
1.3.3 輸出之格式化輸出
(1)什么是格式化輸出?
把一段字符串里面的某些內容替換掉之后再輸出,就是格式化輸出。
(2)為什么要格式化輸出?
我們經常會輸出具有某種固定格式的內容,比如:'親愛的xxx你好!你xxx月的話費是xxx,余額是xxx‘,我們需要做的就是將xxx替換為具體的內容。
(3)如何格式化輸出?
這就用到了占位符,如:%s、%d:
# %s占位符:可以接收任意類型的值
# %d占位符:只能接收數字
>>> print('親愛的%s你好!你%s月的話費是%d,余額是%d' %('tony',12,103,11))
親愛的tony你好!你12月的話費是103,余額是11
# 練習1:接收用戶輸入,打印成指定格式
name = input('your name: ')
age = input('your age: ') #用戶輸入18,會存成字符串18,無法傳給%d
print('My name is %s,my age is %s' %(name,age))
# 練習2:用戶輸入姓名、年齡、工作、愛好 ,然后打印成以下格式
------------ info of Tony -----------
Name : Tony
Age : 22
Sex : male
Job : Teacher
------------- end -----------------
二 基本運算符
2.1 算術運算符
python支持的算數運算符與數學上計算的符號使用是一致的,我們以x=9,y=2為例來依次介紹它們
2.2 比較運算符
比較運算用來對兩個值進行比較,返回的是布爾值True或False,我們以x=9,y=2為例來依次介紹它們
2.3 賦值運算符
python語法中除了有=號這種簡單的賦值運算外,還支持增量賦值、鏈式賦值、交叉賦值、解壓賦值,這些賦值運算符存在的意義都是為了讓我們的代碼看起來更加精簡。我們以x=9,y=2為例先來介紹一下增量賦值
2.3.1 增量賦值
2.3.2 鏈式賦值
如果我們想把同一個值同時賦值給多個變量名,可以這么做
>>> z=10
>>> y=z
>>> x=y
>>> x,y,z
(10, 10, 10)
鏈式賦值指的是可以用一行代碼搞定這件事
>>> x=y=z=10
>>> x,y,z
(10, 10, 10)
2.3.3 交叉賦值
我們定義兩個變量m與n
>>> m=10
>>> n=20
如果我們想將m與n的值交換過來,可以這么做
>>> temp=m
>>> m=n
>>> n=temp
>>> m,n
(20, 10)
交叉賦值指的是一行代碼可以搞定這件事
>>> m=10
>>> n=20
>>> m,n=n,m # 交叉賦值
>>> m,n
(20, 10)
2.3.4 解壓賦值
如果我們想把列表中的多個值取出來依次賦值給多個變量名,可以這么做
>>> nums=[11,22,33,44,55]
>>>
>>> a=nums[0]
>>> b=nums[1]
>>> c=nums[2]
>>> d=nums[3]
>>> e=nums[4]
>>> a,b,c,d,e
(11, 22, 33, 44, 55)
解壓賦值指的是一行代碼可以搞定這件事
>>> a,b,c,d,e=nums # nums包含多個值,就好比一個壓縮包,解壓賦值因此得名
>>> a,b,c,d,e
(11, 22, 33, 44, 55)
注意,上述解壓賦值,等號左邊的變量名個數必須與右面包含值的個數相同,否則會報錯
#1、變量名少了
>>> a,b=nums
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
#2、變量名多了
>>> a,b,c,d,e,f=nums
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 6, got 5)
但如果我們只想取頭尾的幾個值,可以用*_匹配
>>> a,b,*_=nums
>>> a,b
(11, 22)
ps:字符串、字典、元組、集合類型都支持解壓賦值
2.4 邏輯運算符
邏輯運算符用於連接多個條件,進行關聯判斷,會返回布爾值True或False
2.4.1 連續多個and
可以用and連接多個條件,會按照從左到右的順序依次判斷,一旦某一個條件為False,則無需再往右判斷,可以立即判定最終結果就為False,只有在所有條件的結果都為True的情況下,最終結果才為True。
>>> 2 > 1 and 1 != 1 and True and 3 > 2 # 判斷完第二個條件,就立即結束,得的最終結果為False
False
2.4.2 連續多個or
可以用or連接多個條件,會按照從左到右的順序依次判斷,一旦某一個條件為True,則無需再往右判斷,可以立即判定最終結果就為True,只有在所有條件的結果都為False的情況下,最終結果才為False
>>> 2 > 1 or 1 != 1 or True or 3 > 2 # 判斷完第一個條件,就立即結束,得的最終結果為True
True
2.4.3 混用and、or、not
# and、or、not三者如果混用時,是存在優先級之分的,但在日常開發中我們無需記憶優先級,應該使用()來區分優先級、提升程序的可讀性
>>> (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
False
2.5 成員運算符
注意:雖然下述兩種判斷可以達到相同的效果,但我們推薦使用第二種格式,因為not in語義更加明確
>>> not 'lili' in ['jack','tom','robin']
True
>>> 'lili' not in ['jack','tom','robin']
True
2.6 身份運算符
需要強調的是:==雙等號比較的是value是否相等,而is比較的是id是否相等
#1. id相同,內存地址必定相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Tony:18'
>>> y='Info Tony:18'
>>> id(x),id(y) # x與y的id不同,但是二者的值相同
(4327422640, 4327422256)
>>> x == y # 等號比較的是value
True
>>> type(x),type(y) # 值相同type肯定相同
(<class 'str'>, <class 'str'>)
>>> x is y # is比較的是id,x與y的值相等但id可以不同
False