1. 程式人生 > >python基礎之資料型別與算術運算

python基礎之資料型別與算術運算

一.python的編碼規範

1.分號:不要在行尾加分號,也不要使用分號將兩條命令放在同一行

2.行長度:一般情況下每行不要超過80個字元

3.括號:寧缺毋濫的使用括號

4.縮排:使用4個空格來縮排程式碼

5.空行:頂級定義之間空兩行,方法定義之間空一行

6.語句:通過每個語句應該獨佔一行

7.儘量避免檔名中出現空格和中文

二、python的基本語法

python的語法比較簡單,採用縮排的方式,寫出的程式碼大概是這樣的:

# print absolute value of an integer:
a = 100
if a >= 0
: print(a) else: print(-a)

其中#開頭的語句是註釋,註釋是給程式設計人員看的,直譯器會忽略掉註釋。其他每一行就是一個語句,當語句以:冒號結尾是,縮排的語句為程式碼塊。

按照約定始終使用4個空格的縮排(不管是空格或是Tab鍵都可以),在文字編輯器中,設定把Tab自動轉成4個空格即可

​ 注意:Python程式是大小寫敏感的

三、識別符號

什麼是識別符號?說白了它就是一個字串

識別符號規則:

​ 1.只能由字母、數字、下劃線組成

​ 2.開頭不能是數字

​ 3.不能是python的關鍵字

​ 例如:def False True and break class del 等等

​ 4.區分大小寫

​ 5.取名字要做到見名知義

作用:

給變數、函式 , 類等命名

四、python資料型別和變數

(一)資料型別

為什麼會有不同的資料型別

計算機是用來做數學計算的機器,因此它可以處理各種數值,但是計算機能夠處理的遠遠不止是數值,它還可以處理文字、圖形、音訊、視訊等各種各樣的資料,不同的資料要定義不同的資料型別。

python的資料型別分為幾種?

1.Number(數字)
      ​       a.整數 :python可以處理任意大小的整數,當然包括負整數,在程式的表示方法和數學上的寫法是一模一樣的,例如:1, 100, -10等

      ​       b.浮點數:浮點數又稱小數,之所以稱之為浮點數,是因為按照科學計數法表示的的時候,一個浮點數的位置是可變的,比如1.23x10^5 與 12.3x10^4是相等的。[在python中浮點數的表示會有一定的誤差,這個誤差的原因是實數的無限精度跟計算機的有限記憶體之間的矛盾]

      注意:整數與浮點數在計算機記憶體的儲存方式不同,整數運輸是精確的,而浮點數運算則可能會有四捨五入的誤差。

      ​       c.複數:複數由實數部分和虛數部分組成,可以用a+bj或者complex(a,b)的形式表示,複數的實部a和虛部b都是浮點型。     
2.String(字串)

字串是以單引號或雙引號括起來的任意文字,比如“abc”,‘xy’等等,請注意‘’或者“”本身只是一種表示方式,並不是字串的一部分。

a.若字串內部包含單引號又包含雙引號怎麼辦?

print('I\'m \"ok\"')

表示的字串內容是:

I'm "ok"

注意:轉義字元\可以轉義很多字元,比如\n表示換行,\t表示製表符,字元\本身也需要轉義,所以\\表示的字元就是\等等

>>>print('I\'m ok.')
I'm ok.
>>>print('I\'m learning\n python.')
I'm leanring
Python.
>>> print('\\\n\\')
\
\

但是,如果字串裡面很多字串需要轉義,就需要新增很多,為了簡化,python還允許用r”“表示內部的字串預設不轉義。

>>> print('\\\t\\')
\   \
>>>print(r'\\\t\\')
\\\t\\

如果字串內部很多換行,用\n寫在一行裡不好閱讀,為了簡化,python允許用”’…”’的格式表示多行內容:

>>> print('''line1
    line2
    line3''')
line1
line2
line3
3.Boolean(布林值)

布林值只有True、False兩種值,在python中可以直接用True、False表示布林值【注意大小寫】,也可以通過布林運算計算出來:

>>> True
True
>>> 3 > 2
True
4.None(空值)

空值是python裡一個特殊的值,用None表示,None不能為0,而None是一個特殊的空值。

5.list(列表)

Python內建的一種資料型別是列表:list。list是一種有序的集合,可以隨時新增和刪除其中的元素

>>> list1 = ["張三", "王二", "李四"]
>>> type(list1)
<class 'list'>
6.tuple(元組)

另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改

>>> tuple1 = ("張三", "王二", "李四")
>>> type(tuple1)
<class 'tuple'>
7.dict(字典)

Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。

>>> dict1 = {'lisi': 89, 'lili':90}
>>> type(dict1)
<class 'dict'>
8.set(集合)

set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。

>>> set1 = {"lisi", "wanger"}
>>> type(set1)
<class 'set'>
(二)變數

變數的概念基本上和初中代數的方程變數是一致的,只是在計算機程式中,變數不僅可以是數字,還可以是任意資料型別。

1.概述:程式可操作的儲存區的名稱,在執行的期間能夠改變的資料,每個變數都是特定的型別

作用:將不同型別的資料儲存到記憶體中

2.變數的定義:

變數名=初始值

age = 18

注:給定初始值的原因是因為確定變數的型別

age = 18
print('age =', age)
#檢視變數的型別
print(type(age))
#檢視變數的地址
print(id(age))

3.刪除變數:

del 變數名

注意:刪除後的變數無法引用

age = 18
#刪除age變數
del age
#列印age的值
print('age =', age)

注意:在Python中,等號=是賦值符號,可以把任意資料型別賦值給變數,同一個變數也可以反覆賦值,而且可以是不同型別的變數。像這種本身型別不固定的語言被稱為動態語言

當然你也可以這麼理解,變數的型別取決於被賦的值的型別。

a = 123 #a是整數
print(a)
print(type(a))
a = 'abc' #a變為字串
print(a)
print(type(a))
(三)常量:

程式執行期間不能改變的資料

#常見的常量
123
'abc'

五、Number(數字)

1.數字型別之間的轉換
> int(x) :將x轉換為一個整數

> float(x) :將x轉換為一個浮點數
#浮點數轉為int
print(int(1.9))
# int轉為浮點數
print(float(1))
#字串轉為int
print(int('123'))
#字串轉為float
print(float('12.3'))
#注意:如果有其他無用字元會報錯,比如:
print(int('abc'))
#只有正負號才有意義
print(int('+123'))
print(int('-123'))
2.數學函式

abs(x):返回數字的絕對值

(x > y)-(x < y) :比較大小,取值為正x>y ,取值為負x

#返回數字的絕對值
num1 = -10
num2 = abs(num1)
print(num2)

#比較兩個數的大小
num3 = 100
num4 = 8
print((num3 > num4)-(num3 < num4))

#返回給定引數的最大值
print(max(1, 2, 3, 45, 34, 12))

#返回給定引數的最小值
print(min(12354))

#求x的y次方  2^5
print(pow(2, 5))

#round(x[,n])返回浮點數x的四捨五入的值,如果給出n值,則代表舍入到小數點後n位
#預設保留整數
print(round(2.1234))
print(round(2.13334, 3))
3.math模組的使用

匯入math模組

math.ceil(x):返回x的向上取整數值

math.floor(x):返回x的向下取整的數值

math.modf(x):返回x的整數部分和小數部分,兩部分的數值符號與x相同,整數部分以浮點數表示。

math.sqrt(x):反回數字的x的開平方根,返回型別為實數【浮點型】

import math

#向上取整
print(math.ceil(18.1))
print(math.ceil(18.8))

#向下取整
print(math.floor(18.1))
print(math.floor(18.9))

#返回整數部分與小數部分
print(math.modf(22.123))

#開方
print(math.sqrt(16))
4.隨機數函式

匯入random模組

random.choice([1,2,3,4]) :隨機返回一個元素【從指定序列中挑選一個元素】

random.randrange(n):從0~n-1之間選擇一個隨機數

random.random() :隨機產生[0,1)之間的數,結果為浮點數

l1 = [1, 2, 4, 5]

random.shuffle(l1) :將序列中的所有元素進行隨機排列

random.uniform(m, n) :隨機產生一個[m, n]之間的浮點數

import random

nums = range(10)
# range([start,] stop[, step])
# range()函式返回一個可迭代物件
# start:計數從start開始,預設從0開始
# stop:計數到stop結束,但不包括stop
# step: 步長,預設為1
list(nums)
# 使用list可以把可迭代物件轉為一個列表,返回的型別為列表
#隨機數
print(random.choice([1,3,4,5]))
print(random.choice(range(5)))
print(random.choice("hello"))

#產生一個1~100之間的隨機數
r1 = random.choice(range(100))+1
print(r1)

#從指定範圍內,按指定的基數遞增的集合中選取一個隨機數
#random.randrange([start,]stop[, step])
#start:指定範圍的開始值,包含在範圍內,預設是0
#stop:指定範圍結束值,不包含在範圍內
#step:指定的遞增基數,預設是1
print(random.randrang(1, 100, 2))

#從0~99選取一個隨機數
print(random.randrang(100))

#隨機產生[0,1)之間的數(浮點數)
print(random.random())

#隨機產生一個實數,在[3,9]範圍內
print(random.uniform(3, 9))

list = [1, 2, 3, 23, 21]
#將序列的所有元素隨機排序
random.shuffle(list)
print(list)
5.三角函式

需要匯入math模組

六、算術運算子與表示式

算術運算子
 假設變數 a = 10, b = 20
+  :加 兩個物件相加   例如 a + b = 30
-  :減 標識負數/一個數減去另一個數  a - b = -10
*  :乘 兩個數相乘/返回一個被重複若干次的字串 a*b=200
/  : 除 b除以a  b/a = 2
%  : 取模 返回除法的餘數  b%a = 0
** :冪,返回x的y次冪  a**b=10^20
// : 取整除返回商的整數部分  9//2=4, 9.0//2.0=4.0
算術運算表示式
3+2  3-1  8**9  5%3
功能:進行相關符號的數學運算,不會改變變數的值
值:相關的數學運算的結果

七、比較運算子

== 等於,比較物件是否相等,返回布林型別的值

>>> a = 10
>>> b = 20
>>> print(a == b)
False

!= 不等於,比較物件是否不相等

>>> a = 10
>>> b = 20
>>> print(a != b)
True

大於,x > y,返回x是否大於y

>>> a = 10
>>> b = 20
>>> print(a > b)
False

< 小於,x < y,返回x是否小於y

>>> a = 10
>>> b = 20
>>> print(a < b)
True

‘>=’ 大於等於,x >= y,返回x是否大於等於y

>>> a = 10
>>> b = 20
>>> print(a >= b)
False

<= 小於等於,x <= y,返回x是否小於等於y

>>> a = 10
>>> b = 20
>>> print(a <= b)
True

八、賦值運算子與賦值運算表示式

賦值運算子 =
賦值運算表示式
格式:變數 = 表示式

功能:計算了等號右側的“表示式”的值,並賦值給等號左側的變數
值:賦值結束之後的變數

num1 = 10
num2 = num1 + 2

複合運算子

+=  加法賦值運算子     a += b   a = a + b
-=  減法賦值運算子     a -= b   a = a - b
*=  乘法賦值運算子     a *= b   a = a * b
/=  除法賦值運算子     a /= b   a = a / b
%=  取模賦值運算子     a %= b   a = a % b
**= 冪賦值運算子       a **= b  a = a ** b
//= 取整除賦值運算子    a //= b  a = a // b

九、邏輯運算子

and運算是與運算,只有所有都為True,and運算的結果才是True

>>> True and True
True
>>> True and False
False
>>> 5>3 and 3>1
True

or運算是或運算,只要其中一個為True,or運算結果就是True

>>>True or True
True
>>>True or False
True
>>>False or False
False

not 運算是非運算,它是一個單目運算子,把True變成False,False變成True

>>> not True
False
>>> not False
True
>>> not 1>2
True

短路原則

表示式1 and 表示式2 and 表示式3 … 如果表示式1為假,則整個表示式的值為假,後面的表示式則沒有計算的必要

表示式1 or 表示式2 or 表示式3 … 如果表示式1為真,則整個表示式的值為真,後面的表示式的值就沒有計算的必要

十、位運算子

我們進行位運算的時候,我們需要把數字轉換為二進位制數來進行計算
&   按位與
|   按位或
^   按位異或
~  按位取反
<<  左移
>>  右移

1.與運算【&】

參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

3 & 2 = 2

0 1 1
0 1 0
------
0 1 0

2.按位或【|】

只要對應的兩個二進位有一個為1時,結果位就為1

3 | 2 = 3

0 1 1
0 1 0
-----
0 1 1

3.按位異或【^】

當兩對應的二進位相異時,結果為1

3 ^ 2 = 1
0 1 1
0 1 0
-----
0 0 1

4.按位取反【~】

對資料的每個二進位制位取反,即把1變為0,把0變為1

~3 = 4
0 1 1
-----
1 0 0

5.左移運算子【<<】

運算數的各二進位全部左移若干位,由”<<”右邊的數指定移動的位數,低位補0

注意:向左移動,右邊空出來的補0,左移其實就是乘以2的位數次冪

3 << 2 = 12 = 3 * 2^2 

0 1 1
------
0 1 1 0 0

6.右移運算子【>>】

把”>>”左邊的運算數的各二進位全部右移若干位,”>>”右邊的數指定移動的位數

注意:如果最高位0,右移後,用0補空位,如果最高位1,右移後,用1補空位,右移其實就是除以2的位數次冪。

3 >> 2 = 0 = 3/(2^2) 
0 1 1
-----
0 0 0 1 1

-4 >> 2 = -1
1 0 0 0  0 1 0 0
----------------
1 0 0 0  0 0 0 1 0 0

十、成員運算子

in:如果在指定的序列中找到返回值True,否則返回False

>>>a = 10
>>>list1 = [1, 2, 4, 5]
>>>list2 =[20, 10, 15]
>>>print(a in list1)
False
>>>print(a in list2)
True

not in:如果在指定的序列中沒有找到值返回True,否則返回False

>>>a = 10
>>>list = [1, 2, 4, 5]
>>>list2 =[20, 10, 15]
>>>print(a not in list)
True
>>>print(a not in list2)
False

十一、身份運算子【先不講】

is:is判斷兩個識別符號是不是引用自一個物件

>>> a = 1000
>>> b = a
>>> print( a is b)
True

is not:判斷兩個識別符號是不是引用自不同的物件

>>>a =1000
>>>b = 1000
>>>print(a is not b)
False

注意:在[-5, 257)的整數取值範圍內,python的內部具有快取機制,因此在比較這個數值以內的資料可能就會有些問題。

拓展

1.字串和數值型別可以直接輸出

>>>print(1)
1
>>>print("hello world")
hello world

2.變數,無論是什麼型別,數值,布林,列表。字典都可以直接輸出

>>> x=12
>>>print(x)
12
>>> list1 = [1, 2, 3]
>>> print(list1)
[1, 2, 3]

3.格式化輸出

>>> s = 'hello'
>>> s
'hello'
>>> x = len(s)
>>> print("the length of %s is %d"%(s,x))
the length of hello is 5

注意,格式化輸出的時候,

1.%字元:標記轉換說明符的開始;

2.如果只有一個引數可以加括號也可以不加

3.根據型別不同使用的格式化符號也不同,

%d 整數 %f浮點型 %s 字串

十二、分支語句

計算機之所以能夠自動化執行任務,是因為它自己可以做條件判斷。

思考1:現有一需求,比如,輸入使用者年齡,如果小於18,則列印”未成年人禁止進入“

![370AA951-25BC-4374-B07E-4D6BA76BC694](/Users/zhangjiao/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1838887021/QQ/Temp.db/370AA951-25BC-4374-B07E-4D6BA76BC694.png)

if 判斷條件:
    執行語句...

if語句的判斷條件可以用>(大於)、<(小於)、==(等於)、>=(大於等於)、<=(小於等於)來表示關係。

需求2:如果年齡小於18,則列印”未成年人禁止進入“,否則列印”歡迎光臨!“

if 判斷條件:
    執行語句...
else:
    執行語句...

分析:判斷條件:年齡小於18, 如果成立,則執行”未成年人禁止進入“,若不成立,則執行”歡迎光臨!“

age = 17
if age < 18:
    print("未成年人禁止進入")
else:
    print("歡迎光臨!")

拓展:

#可以使用ord 和chr兩個內建函式用於字元與ASCII碼之間的轉換
>>> ord('a')
97
>>> chr(97)
a