10.12 某上市公司自動化測試面試題洩露了

某上市公司自動化測試面試題洩露了!

一、浮點數運算

◆ 題目

判斷浮點數的運行結果是否相等:

某上市公司自動化測試面試題洩露了

題目解析:

本題考查的是計算機的浮點運算知識點。

不僅是python語言,其他的編程語言也面臨同樣的問題:

在進行浮點運算的時候,10 進製表示方式會丟掉它的精度,造成運算結果與實際結果不符合。

這是由於底層 CPU 和運算標準通過自己的浮點單位去執行算術時的特徵決定的。看似有窮的小數, 在計算機的二進制表示裡卻是無窮的。

所以在進行高進度浮點運算的時候一定要注意,尤其是自動化測試過程中需要進行斷言非常容易出錯。

題目答案:

斷言失敗,拋出 AssertionError 錯誤。

解決方案:

使用Decimal模塊:

某上市公司自動化測試面試題洩露了

Decimal() 可以維持浮點數的精度,在金融領域和測試領域等精度要求高的行業有非常大的作用。

但是一定要注意: Decimal() 傳的參數一定要是字符串類型,如果是數據類型會再次丟掉精度。

某上市公司自動化測試面試題洩露了

二、列表的扁平化和降維

題目

有一個二維列表,降成普通的一維的。

比如說檸檬班都會有學員分組,我們想通過分組信息去獲取所有的學員名稱。

某上市公司自動化測試面試題洩露了

方法一

最簡單的方式可以通過for循環的方式一一提取:

某上市公司自動化測試面試題洩露了

方法二

但是在面試的時候可能會加一些限制,比如讓你用一行代碼實現,這個時候就需要對python基礎有進一步的理解了。

比如說使用sum函數:

某上市公司自動化測試面試題洩露了

非常簡單就實現了同樣的功能。

sum函數為什麼可以做到呢?先看一個簡單的例子:

某上市公司自動化測試面試題洩露了

得到的結果是6。

也就是說,sum函數會把一個列表裡面的每個元素相加。

但是sum函數還可以有第二個參數:開始值,默認為0,所以上述過程其實可以寫成:

某上市公司自動化測試面試題洩露了

依據同樣的道理,可以對列表進行降維操作:

某上市公司自動化測試面試題洩露了

方法三

通過列表推導式也可以方便的解決:

某上市公司自動化測試面試題洩露了

三、多重繼承

某上市公司自動化測試面試題洩露了

多重繼承經常用來出面試題。

在這個考題中,C類的父類A和B都實現了run方法,那在C的對象裡到底是優先調用哪一個呢?

答案是:a running

菱形問題

某上市公司自動化測試面試題洩露了

他們的繼承關係圖可以簡化如下,這個問題又稱為菱形問題或者鑽石問題:

某上市公司自動化測試面試題洩露了

答案是:c running

如果我們不讓C類繼承A呢?

某上市公司自動化測試面試題洩露了

他們的繼承關係圖可以簡化如下,可以簡稱為v型問題:

某上市公司自動化測試面試題洩露了

答案會變成a running

題目解析

具體原因是 python 的繼承會遵循特定的順序,優先級排在前面的,子類會優先使用。

怎麼快速查看這種繼承順序呢?通過D.__mro__去查看

比如在菱形問題上,d的順序是這樣的:

(<class>, <class>, <class>, <class>, <class>)
/<class>/<class>/<class>/<class>/<class>

D 排在最前面,如果 D 定義了 run 方法,就會被優先使用,然後是 B, 然後是C, 然後是 A, 最後是 object 基類。

而在V行問題上,d的順序又變成了這樣:

(<class>, <class>, <class>, <class>, <class>)/<class>/<class>/<class>/<class>/<class>

A和C互換了順序。造成2個題目的答案不一致。


分享到:


相關文章: