Python進階系列連載(1)——那些容易被忽略的問題(上)
本篇我們來聊一聊一些在入門部分容易被忽略的問題
int()強制轉換浮點數
在int()的強制轉換浮點數時候,不管是正數還是負數,只取整數部分。
注意:這裡不是向上或者向下取整,也不是四捨五入。
無限遞迴
還記得我們講的俄羅斯套娃麼,還記得數列求通項公式麼,都用到了遞迴的思想
如果不記得了,記得回看入門教程哦~
遞迴是為了將問題簡化為更小規模的同類型問題,最後加以解決。
但是有一種情況是遞迴時不斷呼叫自身,達到不了最簡單的情況(例如俄羅斯套娃一層層開啟到最內層的)
所以一直找不到遞迴的出口
我們定義了一個函式名為recurse
然後函式體中呼叫自身
當我們執行呼叫這個函式時,系統丟擲異常,意思是達到了最大的遞迴深度。
你可以認為系統設定了一個最大遞迴次數,如果超過這個次數還沒解決問題,則丟擲異常
簡答點說,就是:繞來繞去你怎麼還沒解決問題,你是要上天麼!
這種問題,我們要避免!
字串是不可變的
在入門階段我們說過,字串和元組是不可變的資料型別,那字串的不可變體現在哪呢?
看個例子:
如果我想改名字,而且改的是姓【不要當真,只是為了舉例子,我爸應該看不到這篇文章的】
我把姓 '王' 改為 ' 方',我就做了如下修改:
結果丟擲異常,提示不讓我修改,這體現了字串的不可變性,如果你執意要改呢?
可以這樣
聯合使用字串的切片和拼接完成~
一些遺漏的字串方法
upper()和lower()方法
upper()能將一個字串的字母全變成大寫,lower()與之相反:
find()方法
find()可以在字串中查詢子串是否存在:
如果找到,返回的是子串的起始索引位置,例如Hello是從字串索引0位置開始,空格是在索引5位置
當找不到子串時,返回-1,而不是丟擲異常
還可以限定查詢開始的索引位置:
我們知道,空格的索引是5,當我們從索引3開始往後找,能找到空格
當我們從索引7開始找,則返回沒找到,因為索引7已經在索引5之後了
注意操作的返回值
我們用a來 接盤 , 啊呸!接收來自print的返回值,發現a是NoneType,所以print是沒有返回值的
例如在列表中,你希望接收排序的結果,你可能會這樣寫:
發現這樣是沒有結果的!
你還能找出哪些容易犯錯的地方呢?
人生苦短,我選Python!