【Python】Day 2.基本知識(輸入、分支結構、迴圈結構)
技術標籤:Python學習日記
文章目錄
一.輸入函式
1.概述
python的輸入函式是input(),返回值即使用者輸入的內容
基本用法為:變數=input([prompt])
其中prompt為提示資訊,也可以選擇不加提示資訊:
例:
number=input('請輸入一個數字:')
print('你輸入的數字為:',number)
將輸入的值賦給了變數number
如果不想加提示資訊的話:number=input()
同樣合法
需要注意的是python中預設使用者輸入的是字串(畢竟變數的建立都不需要宣告型別,編譯器如何判斷你想輸入的是啥型別呢?)
所以如下操作會報錯:
number=input('請輸入一個數字:')
print(number+2)
因為2是整型,number被預設為字串型,兩個不同型別的相加是不合法的。
解決方法就是利用int()函式將輸入函式的返回值轉換為整型,這樣number就變成整型變量了:
number=int(input('請輸入一個數字:'))
print(number+2)
2.split函式
因為所有輸入的內容都會被視為一個字串,那如果想在一行輸入多個變數應該怎麼辦呢?
split函式
可以實現對字串的切片
split(str,int)
引數:
第一個引數是一個字串,即分隔符,預設為空格、製表符等
第二個引數是一個整型,即分割次數,預設為-1(表示所有)
返回值:
一個字串列表
例:
str="wo qu ta ma de"
print (str.split(' ',2))
輸出結果為:
[‘wo’, ‘qu’, ‘ta ma de’]
即三個字串的列表(因為分隔兩次)
應用於input()函式:
前文說過input函式的返回值就是一個字串,所以直接把input()當成一個字串,然後通過split切片再賦值即可
例:
a,b,c=input ().split(',',2) #將輸入的字串分割兩次,分隔符為逗號
print('a=',a,sep='')
print('b=',b,sep='')
print('c=',c,sep='')
輸入 2,3,4 (逗號為分隔符)
輸出結果:
a=2
b=3
c=4
但是正如之前所說的,使用者輸入的都被當作了字串型,所以會出現如下結果:
a,b,c=input().split(',',2)
print('sum=',a+b+c,sep='')
顯示:
sum=234
因為它們被視作了字串型,所以加法執行的是字串的拼接
那如果我想讓a,b,c是int型怎麼辦呢?
一種做法是int()函式一個個轉換,但是未免太過繁瑣,也可以利用map函式一步到位:
3.map函式
map函式:
根據指定的函式對指定序列作對映(可以理解為對序列的每個元素執行該函式)
map(function, iterable, …)
引數:
第一個引數為function,即一個函式
後面的引數為序列
返回值:
迭代器 //還不太懂,懂了再回來更新
應用於input()函式:
將之前的例子修改一下:
a,b,c=map(int,input().split(',',2))
因為int是內建的轉換型別的函式
而split函式返回的就是一個序列
相當於split函式返回的序列的每一個元素(字串型別)都執行了int函式,轉換為了整型
a,b,c=map(int,input().split(',',2))
print('sum=',a+b+c,sep='')
這麼操作後輸出結果就沒問題了:
sum=9
4.同一行輸入不同型別的變數
有兩個想法:
①手動一個個修改
②自己寫一個型別轉換的函式,判斷引數的型別並作相應的修改
二.分支結構
首先要注意的一點是,python語言的書寫風格:不是用分號來分隔語句,而是一行程式碼預設為一條語句;不是用花括號來分隔程式碼塊,縮排相同的程式碼被視為位於同一個程式碼塊
何謂縮排?寫作文時每一段的開頭要空兩個,空的兩格就是縮排。即程式碼前的空格就是縮排
程式的基本結構是順序的,即從上往下一行一行執行。但是有些功能需要其它結構來執行:
1. if語句
if表示如果
if (表示式):
語句
上述語句的意思為:
如果表達值為真,則執行語句,否則不執行
程式語言中非0即真,0為假
所以如果這個表示式的值為1、-1、18這樣的非0數,語句就會執行,如果為0則直接跳過
更一般的是用比較運算子和邏輯運算子結合形成的表示式
例:
a=3
b=4
if (a<b and a+b<10):
print('ok')
<、>、<=、>=、==、!=都是比較運算子,表示式的值為一個布林值(若表示式成立返回1,否則返回0)
比如3>2 為真 返回 1,2>=7 為假,返回 0
and、or、not 為邏輯運算子,同樣返回一個布林值。and是隻有兩者都為真才為真,or時兩者都為假時才為假,not是單目運算子,可以返回與運算物件真假性相反的值
故上面的程式含義是:
如果 a小於b且a+b<10,則輸出ok,否則不輸出
值得一提的是if語句後面的括號可以不加(python大概就是為懶人設計的語言吧)
2.if …… else
例:
if a<b and a+b==10:
print ('ok')
else :
print("hi")
上述語句的意義為:如果a小於b 且 a+b 等於10輸出ok,否則輸出hi
else執行的功能就是否則……
需要注意的點是if 和 else 要對齊,畢竟python是以縮排區別程式碼塊的(雖然很方便但還是C更自由啊)
3.if…… elif…… else
如果需求分支更多的結構,就要用到elif
elif其實就是else if的縮寫
例:
a=3
b=4
if a<b:
print ('ok')
elif a>b :
print("hi")
else:
print('no')
上述語句的意思是:
如果a<b 輸出ok
如果a>b 輸出hi
如果a==b 輸出no
程式的執行邏輯是這樣的:
先看if後的表示式是否為真,若為真則執行if後的內容,執行完後跳過這個分支結構後面的內容
再看elif 後的表示式是否為真,若為真執行,執行完後跳過該分支結構
值得一提的是elif可以有無限多個,如果還有elif程式還會不斷進行判斷直到遇到為真的表示式
如果前面的表示式都是假的,執行到else這就會直接執行else 後的內容(所以else 後不需要加表示式)
此外,分支結構中不一定要有else,它可以只由if 和 若干個elif組成
三.迴圈結構
除了順序和分支結構,迴圈結構也是必要的一種邏輯結構。如果現在要求在螢幕上列印1000個hello world,寫一千遍程式碼實在過於繁瑣,而這時就可以用迴圈結構來執行這些重複性的工作
1.for in 迴圈
例:
for i in range(1,5):
print('no')
上述語句執行的功能是在螢幕上輸出4個no
其中這裡的i是一個整型的變數,由range來指定其範圍:
i初始時為1,每執行一次迴圈體中的內容(即print函式)i就會加1,當i等於4時迴圈結束(所以只輸出了4個no而不是5個,這意味著range是前閉後開的)
既然i是變數,可以通過列印i來加深對迴圈過程的理解:
for i in range(1,5):
print(i)
print('i=',i)
輸出為:
1
2
3
4
i= 4
可以發現for迴圈建立的變數i在迴圈結束後仍然存在,可以被print輸出
range函式的原型很多:
range(start,stop,step)
前兩個引數分別為起點與終點
第三個引數是步長,預設為1
步長即走一步的長度,若for i in range(1,7,2)
則i的變化:1→3→5,然後結束迴圈
2.while 迴圈
這部分和C語言就幾乎一樣了
三個關鍵字:while、break、continue
while的用法
while 表示式 :
語句
while的執行邏輯:
1)判斷表示式是否為真
2)若為真執行語句,否則結束迴圈
3)再判斷表示式是否為真
不斷迴圈直至表示式為假
例:
輸出1到9的所有數::
i=1
while i<10 :
print(i)
i+=1
執行結果:
1
2
3
4
5
6
7
8
9
break的用法:
break即迴圈終止符,作用是結束迴圈
例:
i=1
while True :
i+=3
if i>10:
break
print(i)
其中True是一個布林變數,值為1
輸出:
4
7
10
需要注意break只會終止當前所在的迴圈,在迴圈巢狀是要注意這一點
continue的用法:
continue即繼續,作用是跳過這次迴圈,直接進行下一次迴圈
例:
i=1
while i<10:
i+=1
if i%2==1 :
continue
print(i)
若i%2==1(即i為奇數)
則continue,直接進入下一次迴圈,print函式不會被執行
輸出:
2
4
6
8
10
三種結構往往互相巢狀,從而形成了更加複雜的結構