日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python笔试题 github_简单的python面试题,居然

發布時間:2023/12/4 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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面试题,居然的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。