1. 程式人生 > 其它 >【Python】Day 2.基本知識(輸入、分支結構、迴圈結構)

【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

三種結構往往互相巢狀,從而形成了更加複雜的結構