盤點一道帶“坑” Python 基礎題目(附源碼)
大家好,我是Python進階者。
前言
昨天在小編的Python交流群里,有個叫【A?】的粉絲在群里問了一道關于Python基礎的問題,初步一看覺得很簡單,實際上是有坑的,這里整理成一篇文章,分享給大家。
題目是如下圖所示:
看題目確實覺得很簡單哈,一頓操作猛如虎,各路神仙各顯神通,不過一開始大家也確實輕敵了。
下面是答題一覽:
發現沒有這么簡單,再來一擊:
一、思路
這個問題看似簡單,但是其實是有潛在的坑的,詳情看下圖紅色框框。
關于思路,倒是有兩個,其一是【磐奚鳥】大佬提供的想法,檢測首尾是不是[]()這種,是就轉換一下type,能解決list,tuple,但是其他的數據類型,就處理不來了,這個想法還是有弊端的。
其二是使用eval()函數,這個正解,具體看下一節。
二、解決方法
1)代碼一
這里先給出【A?】大佬自己的代碼,如下圖所示。
- # coding: utf-8
- a = (input('請輸入一個數據:'))
- b = eval(a)
- print(a, type(b))
乍一看,這個代碼確實可以實現,但是細心的大佬如【??(這是月亮的背面)】,會發現這里會隱藏有一個小bug,那就是作者在input()函數外層還加了個括號,也就是說硬生生的將輸入做了一次元組強轉。
如果輸入元組或者字典,那就要翻車了,講真,一開始我看到這里還有一些蒙圈,后來就明白了??聪聢D【磐奚鳥】給出的一個反例測試結果:
乍一看,你根本就不敢相信,竟然會出錯,而且你會很詫異的表示,問題到底在哪?
其實問題出在input函數外層的那個括號,用括號給input套了一層,那么它就是元組了,里面的元素是字符串,而evaleval只能解析字符串,解不了元組,所以會報錯。
2)代碼二
經過上面的分析,相信大家應該知道問題出在哪里了,只需要將input函數外層的那個括號去掉,就可以了。
- # coding: utf-8
- a = input('請輸入一個數據:')
- b = eval(a)
- print(a, type(b))
下圖是【磐奚鳥】給出的一個測試結果,可以看到他還給多加了一層異常函數處理,顯得更加的完整和健壯:
3)彩蛋
后來大佬也給出了更加詳盡的測試結果,下面一起來看看吧,測試結果表明:基本數據類型輸出都沒有問題。
bool值,復數也可以。
在檢測函數的時候是調用函數,并不是顯示函數的類型:
三、總結
我是Python進階者。本文基于粉絲針對Python基礎問題的提問,在大家的群策群力之下,給出了一個完整的解決方案,滿足了粉絲的要求。
針對這道題目,考點就是eval了,靈活運用,確實可以達到事半功倍的效果,增加異常處理,使得程序更加的穩健。
本文轉載自微信公眾號「Python爬蟲與數據挖掘」,可以通過以下二維碼關注。轉載本文請聯系Python爬蟲與數據挖掘公眾號。