04、Python 系列之--python 的基礎知識

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

PS:轉載請注明出處
作者:TigerChain
地址:http://www.lxweimin.com/p/f77ce55bf495
本文出自 TigerChain簡書 Python 系列

教程簡介

  • 1、閱讀對象

本篇教程適合新手閱讀,老手直接略過

正文

一、python 變量和數據類型

1、什么是變量

簡單的說,我們可以把變量看做一個盒子,可以將零食、飲料、面包等放在里在,想像一下超市中的籃子,或是手推車,理論上你可以將任何你想存放的物品放在這個盒子里面,如圖所示

bl.png

更通俗的說,我們也可以拿學校的宿舍房來舉例,比如,每個房間都有一個房間號,是一一對應的,我們就可以把房間號看做是變量,變量值可以看成是房間里面的人,變量的類似看做是房間的類型「是標準間還是高級間」

ssbl.png

2、變量的聲明

從前面我們知道,python 是動態語言,不需要指定變量的類型「變量的類型根據它的值確定」,我們在 python 中聲明一個變量的格式是:

變量名 = 變量值

比如

a = 100 # 它就是一個整形變量
b = 'TigerChain' # b 就是一個字符串

3、變量的內存分配

當我們輸入 x = 5 時,內存中是如何變化的

首先,當我們輸入 x = 5 的時候,python 解釋器做了兩件事情

  • 1、在內存中創建一個存放 5
  • 2、并且在內存中創建一個名字叫做 x 的指向這個 5

直接寫代碼來直觀的感受一下,新建一個 02、python變量.py 文件「真實項目開發中,不要使用中文來命名,這里為了直觀的表達,采用中文來命名」

# -*- coding: UTF-8 -*-
x = 5
print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

然后 cd 02、python變量.py 所在的目錄,運行

 python 02、python變量.py
x=5
x的地址是:140324664033288

我們可以看到輸出了 5 并且 x 的地址是 140324664033288,我們來看看 x = 5 在內存的分配情況

blfb.png

上圖代表了表達的意思是 x 指向了存儲為 5 的那個地址,并且地址是:140324664033288,這里就和 c 的指針是一樣的,類似于 java 中的棧內存存的地址。

  • 3、把 x 賦值給 y ,我們繼續修改上面的代碼,看有什么情況發生
# -*- coding: UTF-8 -*-
x = 5
y = x
print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

print ("y=%d"%(y))
print ("y的地址是:%d"%(id(y)))

我們把一個變量 x 賦值給變量 y ,然后運行查看結果

 python 02、python變量.py
x=5
x的地址是: 140324664033288
y=5
y的地址是: 140324664033288

結果一模一樣,也就是說 y=x 即把 x 所指向的地址賦給了 y ,里所當然y 的值也就為5,如下圖所示:

y=x.png
  • 4、變量指向不同的值,我們再修改上面的代碼,先給 x 賦值,再改變 x 的值,看看結果
x = 5 

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

x = 8

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

運行輸出

 python 02、python變量.py
x=5
x的地址是:140324664033288
x=8
x的地址是:140549470338992

內存分配如下圖所示

changex.png
changex2.png

開始 x 指向了 140324664033288 這個內存地址,并且里面存放的是5,最后 x = 8 ,改變了 x 所指向的地址。

  • 5、x,y 賦相同的值,代碼如下:
x = 5
y = 5

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

print ("y=%d"%(y))
print ("y的地址是:%d"%(id(y)))

運行查看結果

 python 02、python變量.py
x=5
x的地址是:140374844686328
y=5
y的地址是:140374844686328

得出結論就是,值相同對應的內存地址一定是相同的「在 python 中」

二、輸入輸出

1、輸出

  • 1、基本輸出

在 python 中,輸出我們使用 print,類似于 java 中的 System.out.print.

使用 print 直接跟著想輸出的內容打印到控制臺中

例如,在控制臺輸出 hello world, 當然 print 可以輸出多個字符串,用逗號分隔即可

# python2 上可以支持,在python3上會報錯
print "hello world"

# python2 和 3 上都支持
print("hello world")

# 輸出多個字符串在 python2 中去掉 () 即可
print("hello world","Hi TigerChain")

x = 13
print x

y = 13.56
print y

運行查看結果

print_01.png
  • 2、輸出一個美女
print("******************************************************************")
print("*                       .::::.                                   *")
print("*                    .::::::::.                                  *")
print("*                    :::::::::::                                 *")
print("*                 ..:::::::::::'                                 *")
print("*              '::::::::::::'                                    *")
print("*                .::::::::::                                     *")
print("*           '::::::::::::::..                                    *")
print("*                ..::::::::::::.                                 *")
print("*              ``::::::::::::::::                                *")
print("*             ::::``:::::::::'        .:::.                      *")
print("*              ::::'   ':::::'       .::::::::.                  *")
print("*            .::::'      ::::     .:::::::'::::.                 *")
print("*           .:::'       :::::  .:::::::::' ':::::.               *")
print("*          .::'        :::::.:::::::::'      ':::::.             *")
print("*         .::'         ::::::::::::::'         ``::::.           *")
print("*     ...:::           ::::::::::::'              ``::.          *")
print("*    ```` ':.          ':::::::::'                  ::::..       *")
print("*                       '.:::::'                    ':'````..    *")
print("******************************************************************")

運行查看:

print_mv.png
  • 3、格式化輸出

python 中有兩種格式化輸出的方式

「1」 一種是格式化表達式

類似于 c 中的 printf 輸出參數一樣

%d 十進制整型
%s 字符串
%f 浮點型

%x 十六進制
%o 八進制
%r 萬能占位符,什么都可以用

比如:

x = 0x123
print("0x123 的進制輸出---十六進制:%x,十進制:%d,八進制:%o"%(x,x,x))

y = '你好'
c = 13.56
d = 13

print("%s,%f,%d"%(y,c,d))

運行輸出

print_%+.png

「2」 一種是格式化方法

使用 format() 格式化方法

比如:

print('{0} {1} {2}').format('Hello','ThgerChain',"Good")

其中 {0} ... 就像是一個占位符,后面才是真正的值填充到占位符中

運行輸出

print_format.png

2、輸入

我們在 ATM 上取錢的時候,肯定要輸入密碼,那么這就是一個輸入的過程,輸出的肯定是錢

input_auto.png
  • 1、pthon 中輸入語法「python2 和 python3 中有區別」

在 python2 中輸入:raw_input()

在 python3 中輸入:input()

輸入返回的是一個字符串,我們可以使用 type() 來檢測某個變量的類型

例如:一個簡單的乘法

num = raw_input("請輸入數字:")
print type(num) # 可以檢 num 的類型
print(num+"*2=%d"%(int(num)*2))

運行輸出:

 python 03、輸入和輸出.py
請輸入數字:1
<type 'str'>
1*2=2
  • 2、一個簡單的取款機 demo

「1」、效果圖

get_money.gif

「2」、代碼

# 定義密碼輸入次數
inputPasscount = 0
# 提示你是否插入銀聯卡 輸入 yes 即可
chaka = raw_input('你是否插入銀聯卡:')
if(chaka=='yes'):
    password = int(raw_input('請輸入卡密碼:'))
    # 只給你三次輸入密碼的機會,錯了卡就被吞了
    while inputPasscount < 3:
        if(password==123456):
            money = raw_input('輸入你要取的錢數:')
            if money.isdigit():# 全部是數字則正確
                print("你成功的取了 %d "%(int(money))+"元")
                break
            else:
                print("請輸入正確的金額")
        else:
            if inputPasscount == 2:
                print("密碼輸錯三次,卡被鎖定,請聯系管理員")
                break
            password = int(raw_input('輸入的密碼錯誤,請重新輸入:'))
            inputPasscount += 1

三、關系運算和邏輯運算符

1、關系運算符

關系運算符是用來描述某種關系的,它不能單獨使用,要用在一個表達式中,格式如下

左邊 運算符 右邊
運算符號 說明 舉例
== 用來檢測兩個值是不是相等,如果相等返回 True ,否則返回 False a = 1 b = 1 a=b為true
!= 如果兩個值不相等,返回True,否則返回 False a=1,b=1 a!=b 為False
<> 如果兩個值不相等,返回True,否則返回 False a=1,b=1 a!=b 為False ,類似于 !=
> 如果左邊的數據大于右邊則返回 True ,否則返回 False a=4,b=3 a>b 返回 True
< 如果左邊的數據小于右邊則返回 True ,否則返回 False a=3,b=4 則 a<b 返回 True
>= 如果左邊的數據大于等于右邊則返回 True ,否則返回 False a=4,b=3 a>=b 返回 True
<= 如果左邊的數據小于等于右邊則返回 True ,否則返回 False a=3,b=3 則 a<=b 返回 True

2、邏輯運算符

運算符號 說明 舉例
and 一假必假,如果用 and 連接起來的有一個為假則整個為假 if(a==1 and y==2):print("xxxx")
or 一真必真,如果用 or 邊境起來的有一個為真整個為真 if(a==1 or y==2):print("xxxx")
not 真假相對,本身是真使用 not 就變為假,反之 if(not(a==1)):print("xxxx")

四、條件語句

1、條件語句 if

「1.1」 if 是用來做條件判斷有,格式如下

if 條件成立:
    處理想要處理的事情 

demo1:如果你 18 歲了,你就可以看血腥電影了

# -*- coding:UTF-8 -*-

a = int(raw_input('請輸入你的年齡:'))
if a>=18:
    print("你可以看血腥的電影了")

運行看結果

 python 04、if語句.py
請輸入你的年齡:18
你可以看血腥的電影了

「1.2」 if 的嵌套,格式如下

if 條件1成立:
    處理滿足條件1,要做的事
    ...
    if 條件2成立:
        處理滿足條件2,要做的事情
        ...

demo2: 如果你 18 歲并且不害怕恐怖事件,那么你可以看血腥電影

修改 demo1

# 輸入年齡
a = raw_input('你是否年滿18歲?回答 yes 或 no :')
if a=='yes': # 年齡滿足
    print('年齡符合了!請繼續輸入問題')
    # 對恐怖事件的看法
    b = raw_input('面對恐怖電影你會非常害怕嗎?回答 yes 或 no :')
    if b =='yes': #滿足條件
        print("你可以看恐怖血腥的電影了!!!")

運行查看結果:

python_if.gif

2、if-else 語句

使用場景就是如果 if 的情況不滿足我們的要求時我們還要干某些事情,我們如何辦?使用 else

格式:

if 條件成立:
    干某些事情 
else:
   不滿足條件要干某些事情 

demo1:如果查詢你的考試得了 90 分以上,就要以出去旅游,否則就在家里學習

# 導入隨機數模塊
import random

print("查看考試成績:1、查詢 ")
inputStr = int(raw_input())
if(inputStr == 1):
    # 生成 80 - 100 的隨機整數
    a = random.randint(80, 100)
    if a >=90:
        print("你的成績是 %d 分,恭喜你可以出去旅游,地點隨便選"%a)
    else:
        print("很遺憾,沒有到 90 分,你還需要加油!爭取下次旅游")
else:
    print("請輸入正確的查詢指令!!!")

運行查看結果:

if_else.gif

3、elif 語句

if-else 如們實現的是當滿足條件的時候我們做事情1,否則做事情2,我們如果有以下場景,當...1 的時候做事情 1 ,當... 2 的時候做事情 2,當 ... 3 的時候估事情 3 ..... 這種情況,我們就可以使用 elif

PS:這里要注意一點,elif 必須和 if 一起使用,不能單獨使用

格式如下:

  if 滿足條件1:
    做事情1
  elif 滿足條件2:
    做事情2
  elif 滿足條件3:
    做事情3

demo1: 如果你有 10 萬你就是十萬元戶,如果有 100 萬就是百萬富翁,有 1000萬就是千萬富翁,超過千萬你真是土豪。

# -*- coding:UTF-8 -*-

money = int(raw_input("請輸入你的財富,輸入整數「代表萬元」即可:"))
if money>10 and money<100:
    print("你是十萬元戶,努力哦")
elif money>=100 and money<1000:
    print("你小有成就,不錯,都是百萬富翁了")
elif money>=1000 and money<10000:
    print("千萬富翁,約嗎?")
elif money>=10000:
    print("靠,你真是土豪,帶我裝逼帶我飛好吧")
else:
    print("得瑟啥呢,好好努力賺錢吧,還不好好的學習 python ,看看 TigerChain 的簡書吧")

運行查看結果:

elif.gif

2、循環語句

我們前面學習了輸出,現在有一個需求把 100 輸出1萬遍,你肯定就瘋了,循環就很好的解決這個問題

1、while 循環

格式:

while 條件:
    條件滿足,做某些事情
    ....

demo1:輸出1-100的和

# 定義結果 變量
total = 0
# 定義循環條件變量
i = 1
while i<=100:
    # 把上一次的結果+1 然后賦值變成新的
    total=total+i
    # 循環+1
    i+=1
print ("1~100的和是:%d"%total)

運行查看結果:

 python 07、while循環.py
1~100的和是:5050

demo2: 計算 1-100 中奇數的和

total = 0
i = 1
while i<=100:
    total = total+i
    # 奇數的算法
    i+=2
print("1~100的所有奇數和是:%d"%total)

運行查看結果:

 python 07、while循環.py
1~100的所有奇數和是:2500

demo3:輸入用戶名和密碼直到正確為止

# 輸入用戶名
username = raw_input('請輸入用戶名:')
# 輸入用戶密碼
password = raw_input('請輸入密碼:')

# 如果用戶名和密碼不對,那么就提示錯誤,再次輸入
while username!='admin' or password!='123456':
    print('用戶名或密碼錯誤,請重新輸入')
    username = raw_input('請輸入用戶名:')
    password = raw_input('請輸入密碼:')
# 如果輸入成功,則提示
print("歡迎 %s 登錄"%username)

運行查看結果:

while-01.gif

demo4:用戶不斷的輸入一個數字,直到輸入 bye 則退出程序

while True:
    num = raw_input("請輸入一個數字「直到輸入 bye 就結束了」:")
    if num=='bye':
        print('結束了')
        break
    else:
        print num

運行查看結果

while-02.gif

當然了,while 還可以嵌套使用,格式

while 條件:
    滿足條件,做某些啥事情
    ...
    while 條件:
    滿足條件,做某些啥事情
    ... 

demo5:使用 while 嵌套打印九九乘法表

#初始一個變量x
x=1
#判斷x小于等于9
while x<=9:
    #初始一個變量y
    y=1
    #確定y的循環次數,小于等于x
    while y<=x:
        #格式化打印輸出
        print y,'*',x,'=',y*x,' ',
        #計數器
        y+=1
    #打印換行,前面用逗號隔開過,沒有這行代碼就連成一片了。
    print
    #外圍的另一個計數器
    x+=1

運行查看結果

 python 07、while循環.py
1 * 1 = 1
1 * 2 = 2   2 * 2 = 4
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12   4 * 4 = 16
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81

2、for 循環

在 python 和其它語言類似,除了 while 循環,還可以使用 for 循環,格式如下

for 臨時變量 in 列表或字條串
    循環體

demo1:循環打印字條串中每個值

name = 'TigerChain'
for x in name:
    print x

運行查看結果:

 python 08、for循環.py
T
i
g
e
r
C
h
a
i
n

demo2:定義一個姓名列表,然后打印出每個名字

names=["張三","李四","王五"]
for name in names:
    print name 

運行查看結果:

 python 08、for循環.py
張三
李四
王五

for 循環也是可以嵌套的,我們來使用 for 循環來打印九九乘法表

demo3:for 循環打印九九乘法表

在這里我們要使用一個 range 函數格式如下:

range(start, end, scan)

range:一個范圍,默認從 0 開始 ,參數含義:start:計數從start開始。默認是從0開始。例如range(5)等價于range(0,10)取 0-9的值,range(0,10,2),最后一個數是間隔的意思,這句就是輸出 0-9 每次間隔 2 的一個列表「數組」

輸出結果是:[0, 2, 4, 6, 8]

for i in range(1,10):
    for j in range(1,i+1):
        result = i * j
        print j, 'x', i, '=', j*i ,'\t',
    print ''

運行查看結果:

 python 08、for循環.py
1 x 1 = 1
1 x 2 = 2   2 x 2 = 4
1 x 3 = 3   2 x 3 = 6   3 x 3 = 9
1 x 4 = 4   2 x 4 = 8   3 x 4 = 12  4 x 4 = 16
1 x 5 = 5   2 x 5 = 10  3 x 5 = 15  4 x 5 = 20  5 x 5 = 25
1 x 6 = 6   2 x 6 = 12  3 x 6 = 18  4 x 6 = 24  5 x 6 = 30  6 x 6 = 36
1 x 7 = 7   2 x 7 = 14  3 x 7 = 21  4 x 7 = 28  5 x 7 = 35  6 x 7 = 42  7 x 7 = 49
1 x 8 = 8   2 x 8 = 16  3 x 8 = 24  4 x 8 = 32  5 x 8 = 40  6 x 8 = 48  7 x 8 = 56  8 x 8 = 64
1 x 9 = 9   2 x 9 = 18  3 x 9 = 27  4 x 9 = 36  5 x 9 = 45  6 x 9 = 54  7 x 9 = 63  8 x 9 = 72  9 x 9 = 81

3、break 和 continue

break 和 continue 用在循環體中,其中 break 是直接跳出循環,continue 是跳出本次循環,繼續下一次循環

demo1:輸入字符串,遇到 o 就退出

a = raw_input("輸入字符串「直到輸入 o 就不會輸出 o 之后的字符」:")
for x in a:
    if x=='o':
        break
    print x

運行查看結果:

輸入字符串「直到輸入 o 就不會輸出 o 之后的字符」:12412qwoqwert
1
2
4
1
2
q
w

我們可以看到,o 以后的字符沒有被輸出

demo2:輸入字符串,只過濾不輸出 o 其它的輸出

a = raw_input("輸入字符串「輸出過濾 o 之后的字符」:")
for x in a:
    if x=='o':
        continue
    print x

運行查看結果:

輸入字符串「輸出過濾 o 之后的字符」:123o321
1
2
3
3
2
1

我們就把 o 過濾掉了

到此為止,我們把 python 的基礎知識就說完了。

本文的 Demo 地址:https://github.com/tigerchain/python-study/tree/master/basic/01-python基本知識

據說每個勤奮、聰明、能干的人都會點喜歡。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容