python笔试题 github_简单的python面试题,居然
晚上翻手機,看見一道網友發的python面試題求助帖,當時簡單掃一眼就跳過了,但下來仔細想想覺得還蠻有趣,開電腦梳理下思路,因為沒有官方答案,所以大家可以一起來做做,其中涉及的python知識點還是蠻多的。
動動發財的小手,免費資料領到手,加加vx不用愁:18406582520,領到資料拍拍手,從此Python不用愁
題目內容
一個標準的版本需要涵蓋,大版本.小版本.補丁版,各版本之間使用英文點符號分隔,且每個版本取值范圍均為0~99。
現有一批產品版本號列表,需要過濾掉不符合要求的內容后,將版本號通過sorted進行升序排列。
題目分析
初看此題,給人的感覺有些好笑,居然要告訴大家使用sorted進行排序,難道是生怕誰不知道這個函數嗎?
但當隨便驗證兩個用例發現,sorted的默認排序存在BUG。
sorted(['1.3.0','1.1.0','1.2.0'])
>>> ['1.1.0', '1.2.0', '1.3.0']
# 錯誤的默認排序
sorted(['1.30.0','1.4.0','1.2.0'])
>>> ['1.2.0', '1.30.0', '1.4.0']
直接使用字符串進行排序,默認是按位對比每個版本號,然后進行排序,這導致了1.30.0 < 1.4.0的BUG。
仔細想想,面試官想考察的應該是sorted的自定義排序方法。那么該如何正確的比較所有版本號,又能同時過濾掉錯誤的版本號呢?
過濾版本號
考慮到版本號的特殊性,最簡單的過濾方法,必然是正則了:
import re
pattern = re.compile(r'^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')
if not pattern.match(version):
raise ValueError("error version [%s],the version type must be [xx.xx.xx]" % version)
當然這里是我們驗證的操作方式,排序時當然不能拋出異常了。
版本號比較
既然每個版本號的取值范圍在0-99之間,那么熟悉數學的我們,是否有了思路?我們按照百進制的方式,來統計版本號,不就能輕易的達到目的么?就拿剛才的1.30.0和1.4.0來舉例如下:
版本號大版本(10000)小版本(100)補丁版本(1)總計
1.30.0100003000013000
1.4.010000400010400
2.1.020000100020100
最終代碼
# -*- coding: utf-8 -*-
# @微信號? : King_Uranus
# @公眾號? ? : 清風Python
# @GitHub? : https://github.com/BreezePython
# @Date? ? : 2020/11/04 22:48:33
# @Software : PyCharm
# @version? :Python 3.7.8
# @File? ? : compare_version.py
import re
class CompareVersion:
def __init__(self, version_list):
self.versions = version_list
self.error_version_num = 0
def com_version(self, version):
sum_version = 0
version_weights = [10000, 100, 1]
pattern = re.compile(r'^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')
if not pattern.match(version):
self.error_version_num += 1
return -1
version_list = version.split('.')
for index, small_version in enumerate(version_list):
sum_version += version_weights[index] * int(small_version)
return sum_version
def sort_version(self):
sorted_version = sorted(self.versions, key=lambda x: self.com_version(x))
return sorted_version[self.error_version_num:]
if __name__ == '__main__':
versions = ['0.0.0', '99.99.99', '100.0.1', '1.0.-1', '1.1.99',
'2.10.1', '2.9.10', '999', '10-0.1']
main_class = CompareVersion(versions)
print(main_class.sort_version())
output:
['0.0.0', '1.1.99', '2.9.10', '2.10.1', '99.99.99']
在sorted遍歷過程中,每當發現一個錯誤版本號,我們就將error_version_num加1,并返回-1,這樣當最終排序后,將切片的排序結果返回,就達到了預期的目的。
當然了,這只是我一時興起的拋磚引玉答案,期待大家給出更好的作答。
總結
以上是生活随笔為你收集整理的python笔试题 github_简单的python面试题,居然的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么将华为手机中网易支付的支付保护中心关
- 下一篇: 升降台选购使用攻略,不用电动桌一样有健康