python闖關 最大最小

2021-07-23 23:51:26 字數 3436 閱讀 9996

在這個任務中,你應該自己寫出py3中實現的內建函式 min 和 max. 一些內建函式在這裡是不能用的:import,eval,exec,globals。 別忘了,你需要在你的**中實現兩個函式。

max(iterable, [, key]) 或者 min(iterable, [, key])

max(arg1, arg2, *args[, key]) 或者 min(arg1, arg2, *args[, key])

返回迭代中的最大(最小)項中或者返回根據所提供引數的最大(最小)值 。

如果有乙個引數時,它應該是乙個迭代器。返回在迭代器的最大(最小)的項。如果提供兩個或更多的引數,返回引數中的最大(最小)的項。

可選的唯一關鍵字是乙個用於從每個列表元素提取乙個用於比較的引數的函式。(例如,key=str.lower.lower)

如果有多個值同是最大(最小)的,函式返回所遇到的第乙個最大值。

– python 文件 內建函式

輸入:乙個引數作為乙個迭代器或兩個以上的引數。 乙個函式作為可選關鍵字引數。

輸出:「max」 函式輸出最大的項 「min」 函式輸出最小的項。

範例:

max(3, 2) == 3

min(3, 2) == 2

max([1, 2, 0, 3, 4]) == 4

min(「hello」) == 「e」

max(2.2, 5.6, 5.9, key=int) == 5.6

min([[1,2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0]

如何使用:此任務將幫助你了解一些內建的功能是如何在更精確的水平上工作的。

前提:所有的測試用例都是正確的並且函式不會引發異常。

def

min******

(arg1, arg2, key):

if key!=none

and key(arg1)or key==none

and arg1return arg1

return arg2

defmin

(*args, **kwargs):

key=kwargs.get("key", none) # extracting key

if len(args)==1: args=list(args[0]) # adapting arguments

# comparing arguments, one by one

result=args[0]

for x in range(1,len(args)):

result=min******(result,args[x],key)

return result

defmax******

(arg1, arg2, key):

if key!=none

and key(arg2)>key(arg1) or key==none

and arg2>arg1: return arg2

return arg1

defmax

(*args, **kwargs):

key=kwargs.get("key", none) # extracting key

if len(args)==1: args=list(args[0]) # adapting arguments

# comparing arguments, one by one

result=args[0]

for x in range(1,len(args)):

result=max******(result,args[x],key)

return result

if __name__ == '__main__':

#these "asserts" using only for self-checking and not necessary for auto-testing

assert max(3, 2) == 3, "****** case max"

assert min(3, 2) == 2, "****** case min"

assert max([1, 2, 0, 3, 4]) == 4, "from a list"

assert min("hello") == "e", "from string"

assert max(2.2, 5.6, 5.9, key=int) == 5.6, "two maximal items"

assert min([[1, 2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0], "lambda key"

assert min(abs(i) for i in range(-10, 10)) == 0

這兩個是python中的可變引數。*args表示任何多個無名引數,它是乙個tuple;**kwargs表示關鍵字引數,它是乙個dict。並且同時使用*args和**kwargs時,必須*args引數列要在**kwargs前。舉個栗子:

def

foo(*args, **kwargs):

print

'args = ', args

print

'kwargs = ', kwargs

print

'---------------------------------------'

if __name__ == '__main__':

foo(1,2,3,4)

foo(a=1,b=2,c=3)

foo(1,2,3,4, a=1,b=2,c=3)

foo('a', 1, none, a=1, b='2', c=3)

輸出結果為:

args =  (1, 2, 3, 4)

kwargs = {}

---------------------------------------

args = ()

kwargs =

---------------------------------------

args = (1, 2, 3, 4)

kwargs =

---------------------------------------

args = ('a', 1, none)

kwargs =

---------------------------------------

本題目主要學習任意數量引數的程式設計。

python闖關 python闖關 Day05

乙個簡單的 選單 usr bin env python coding utf 8 mymenu 動物 貓 黃貓 花貓 狗 二哈 金毛 植物 樹 大樹 小樹 草 綠草 矮草 menu list list mymenu.keys while true print 編號 center 50,for i i...

python闖關 python闖關 Day02

q1 寫乙個使用者迴圈猜年齡的遊戲,猜對就退出,猜不對就繼續猜,猜三次,提示使用者是否繼續,使用者回答y或者y就繼續猜,三次之後再重複,回答n或n就結束遊戲。usr bin env python coding utf 8 猜年齡 import random age random.randint 1,...

python闖關 python闖關 Day009

第9章 合併表達 1 將names albert james kobe kd 中的名字全部變大寫 names albert james kobe kd names name.upper for name in names 應記住的表達方式,很python print names 2 將names a...