函数基础作业
目錄
1、編寫函數(shù),求1+2+3+…N的和
2、編寫一個函數(shù),求多個數(shù)中的最大值
3、編寫一個函數(shù),實(shí)現(xiàn)搖骰子的功能,打印N個骰子的點(diǎn)數(shù)和 ?
4、編寫一個函數(shù),交換指定字典的key和value?
5、編寫一個函數(shù),提取指定字符串中所有的字母,然后拼接在一起產(chǎn)生一個新的字符串 ?
?6、寫一個函數(shù),求多個數(shù)的平均值
7、寫一個函數(shù),默認(rèn)求10的階乘,也可以求其他數(shù)字的階乘 ?
8、寫一個自己的capitalize函數(shù),能夠?qū)⒅付ㄗ址氖鬃帜缸兂纱髮懽帜??
?9、寫一個自己的endswith函數(shù),判斷一個字符串是否已指定的字符串結(jié)束
10、寫一個自己的isdigit函數(shù),判斷一個字符串是否是純數(shù)字字符串 ?
11、?寫一個自己的upper函數(shù),將一個字符串中所有的小寫字母變成大寫字母
12、寫一個自己的rjust函數(shù),創(chuàng)建一個字符串的長度是指定長度,原字符串在新字符串中右對齊,剩下的部分用指定的字符填充 ?
13、?寫一個自己的index函數(shù),統(tǒng)計指定列表中指定元素的所有下標(biāo),如果列表中沒有指定元素返回-1
14、寫一個自己的len函數(shù),統(tǒng)計指定序列中元素的個數(shù) ?
15、寫一個函數(shù)實(shí)現(xiàn)自己in操作,判斷指定序列中,指定的元素是否存在 ?
16、寫一個自己的replace函數(shù),將指定字符串中指定的舊字符串轉(zhuǎn)換成指定的新字符串 ?
17、寫一個自己的max函數(shù),獲取指定序列中元素的最大值。如果序列是字典,取字典值的最大值 ?
18、寫四個函數(shù),分別實(shí)現(xiàn)求兩個列表的交集、并集、差集、補(bǔ)集的功能 ?
1、編寫函數(shù),求1+2+3+…N的和
def sum(n):s = 0for i in range(n + 1):s +=ireturn sif __name__ == '__main__':n = int(input('請輸入累加求和的數(shù):'))print(sum(n))2、編寫一個函數(shù),求多個數(shù)中的最大值
#編寫一個函數(shù),求多個數(shù)中的最大值def max(a):max = 0for i in range(len(n)):if (max < n[i]):max = n[i]return maxif __name__ == '__main__':n = [12,32,455,78,34,56,988,2390]print('最大值為:{}' .format(max(n)))3、編寫一個函數(shù),實(shí)現(xiàn)搖骰子的功能,打印N個骰子的點(diǎn)數(shù)和 ?
#寫一個函數(shù)實(shí)現(xiàn)搖色子的功能,傳入色子的個數(shù),返回所有色子的點(diǎn)數(shù)總和 import randomdef sum(n):s = 0for i in range(n):s +=random.randint(1,6)return sif __name__ == '__main__':n = int(input('請輸入骰子個數(shù)'))print('骰子點(diǎn)數(shù)是:{}' .format(sum(n)))4、編寫一個函數(shù),交換指定字典的key和value?
#編寫一個函數(shù),交換指定字典的key和value。def exchange(x):mydict_new = {}for key, val in mydict.items():#items獲取所有的鍵值對,先取出來的為關(guān)鍵字,后取出來的為鍵值mydict_new[val] = key#賦值給新的字典,字典是內(nèi)部用的是hash表存儲,是無序的,查找時是通過key查找value所在的位置return mydict_newif __name__ == '__main__':mydict = {'張三':23,'李四':33,'王五':44}print(exchange(mydict))""" 字典的基本用法:對于初學(xué)者而言,應(yīng)牢記字典包含多個 key-value 對,而 key 是字典的關(guān)鍵數(shù)據(jù),因此程序?qū)ψ值涞牟僮鞫际腔?key 的。基本操作如下:通過 key 訪問 value 。通過 key 添加 key-value 對。通過 key 刪除 key-value 對。通過 key 修改 key-value 對。通過 key 判斷指定 key-value 對是否存在。通過 key 訪問 value 使用的也是方括號語法,就像前面介紹的列表和元組一樣,只是此時在方括號中放的是 key,而不是列表或元組中的索引。 字典特點(diǎn):字典中所有元素都是一個key-value對,key不允許重復(fù),value可以重復(fù)字典中的元素是無序的 —— —— ——沒有下標(biāo),取值通過方法獲取字典是可變的,字典中key必須是不可變對象 —— —— ——增刪改查字典也可以根據(jù)需要動態(tài)地伸縮字典會浪費(fèi)較大的內(nèi)存,是一種 以空間換時間的數(shù)據(jù)結(jié)構(gòu) 字典常用方法:clear()方法:clear() 用于清空字典中所有的 key-value 對,對一個字典執(zhí)行 clear() 方法之后,該字典就會變成一個空字典代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars) # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 清空cars所有key-value對cars.clear()print(cars) # {}get()方法:get() 方法其實(shí)就是根據(jù) key 來獲取 value,它相當(dāng)于方括號語法的增強(qiáng)版,當(dāng)使用方括號語法訪問并不存在的 key 時,字典會引發(fā) KeyError 錯誤;但如果使用 get() 方法訪問不存在的 key,該方法會簡單地返回 None,不會導(dǎo)致錯誤代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 獲取'BMW'對應(yīng)的valueprint(cars.get('BMW')) # 8.5print(cars.get('PORSCHE')) # Noneprint(cars['PORSCHE']) # KeyErrorupdate()方法:update() 方法可使用一個字典所包含的 key-value 對來更新己有的字典。在執(zhí)行 update() 方法時,如果被更新的字典中己包含對應(yīng)的 key-value 對,那么原 value 會被覆蓋;如果被更新的字典中不包含對應(yīng)的 key-value 對,則該 key-value 對被添加進(jìn)去。代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}cars.update({'BMW':4.5, 'PORSCHE': 9.3})print(cars)從上面的執(zhí)行過程可以看出,由于被更新的 dict 中己包含 key 為“BMW”的 key-value 對,因此更新時該 key-value 對的 value 將被改寫;但如果被更新的 dict 中不包含 key 為“PORSCHE”的 key-value 對,那么更新時就會為原字典增加一個 key-value 對。items()、keys()、values()方法:items()、keys()、values() 分別用于獲取字典中的所有 key-value 對、所有 key、所有 value。這三個方法依次返回 dict_items、dict_keys 和 dict_values 對象,Python 不希望用戶直接操作這幾個方法,但可通過 list() 函數(shù)把它們轉(zhuǎn)換成列表。代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 獲取字典所有的key-value對,返回一個dict_items對象ims = cars.items()print(type(ims)) # <class 'dict_items'># 將dict_items轉(zhuǎn)換成列表print(list(ims)) # [('BMW', 8.5), ('BENS', 8.3), ('AUDI', 7.9)]# 訪問第2個key-value對print(list(ims)[1]) # ('BENS', 8.3)# 獲取字典所有的key,返回一個dict_keys對象kys = cars.keys()print(type(kys)) # <class 'dict_keys'># 將dict_keys轉(zhuǎn)換成列表print(list(kys)) # ['BMW', 'BENS', 'AUDI']# 訪問第2個keyprint(list(kys)[1]) # 'BENS'# 獲取字典所有的value,返回一個dict_values對象vals = cars.values()# 將dict_values轉(zhuǎn)換成列表print(type(vals)) # [8.5, 8.3, 7.9]# 訪問第2個valueprint(list(vals)[1]) # 8.3從上面代碼可以看出,程序調(diào)用字典的 items()、keys()、values() 方法之后,都需要調(diào)用 list() 函數(shù)將它們轉(zhuǎn)換為列表,這樣即可把這三個方法的返回值轉(zhuǎn)換為列表。pop方法:pop() 方法用于獲取指定 key 對應(yīng)的 value,并刪除這個 key-value 對。代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars.pop('AUDI')) # 7.9print(cars) # {'BMW': 8.5, 'BENS': 8.3}popitem()方法:popitem() 方法用于隨機(jī)彈出字典中的一個 key-value 對。此處的隨機(jī)其實(shí)是假的,正如列表的 pop() 方法總是彈出列表中最后一個元素,實(shí)際上字典的 popitem() 其實(shí)也是彈出字典中最后一個 key-value 對。由于字典存儲 key-value 對的順序是不可知的,因此開發(fā)者感覺字典的 popitem() 方法是“隨機(jī)”彈出的,但實(shí)際上字典的 popitem() 方法總是彈出底層存儲的最后一個 key-value 對。代碼如下:cars = {'AUDI': 7.9, 'BENS': 8.3, 'BMW': 8.5}print(cars)# 彈出字典底層存儲的最后一個key-value對,彈出也就是相當(dāng)于刪除了,再輸出原字典時,最后一個key-vaule已經(jīng)沒有了print(cars.popitem()) # ('AUDI', 7.9)print(cars) # {'BMW': 8.5, 'BENS': 8.3}setdefault()方法:setdefault() 方法也用于根據(jù) key 來獲取對應(yīng) value 的值。但該方法有一個額外的功能,即當(dāng)程序要獲取的 key 在字典中不存在時,該方法會先為這個不存在的 key 設(shè)置一個默認(rèn)的 value,然后再返回該 key 對應(yīng)的 value。總之,setdefault() 方法總能返回指定 key 對應(yīng)的 value;如果該 key-value 對存在,則直接返回該 key 對應(yīng)的 value;如果該 key-value 對不存在,則先為該 key 設(shè)置默認(rèn)的 value,然后再返回該 key 對應(yīng)的 value。代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 設(shè)置默認(rèn)值,該key在dict中不存在,新增key-value對print(cars.setdefault('PORSCHE', 9.2)) # 9.2print(cars)# 設(shè)置默認(rèn)值,該key在dict中存在,不會修改dict內(nèi)容print(cars.setdefault('BMW', 3.4)) # 8.5print(cars)fromkeys()方法:fromkeys() 方法使用給定的多個 key 創(chuàng)建字典,這些 key 對應(yīng)的 value 默認(rèn)都是 None;也可以額外傳入一個參數(shù)作為默認(rèn)的 value。該方法一般不會使用字典對象調(diào)用(沒什么意義),通常會使用 dict 類直接調(diào)用。代碼如下:# 使用列表創(chuàng)建包含2個key的字典a_dict = dict.fromkeys(['a', 'b'])print(a_dict) # {'a': None, 'b': None}# 使用元組創(chuàng)建包含2個key的字典b_dict = dict.fromkeys((13, 17))print(b_dict) # {13: None, 17: None}# 使用元組創(chuàng)建包含2個key的字典,指定默認(rèn)的valuec_dict = dict.fromkeys((13, 17), 'good')print(c_dict) # {13: 'good', 17: 'good'}使用字典格式化字符串在格式化字符串時,如果要格式化的字符串模板中包含多個變量,后面就需要按順序給出多個變量,這種方式對于字符串模板中包含少量變量的情形是合適的,但如果字符串模板中包含大量變量,這種按順序提供變量的方式則有些不合適。可改為在字符串模板中按 key 指定變量,然后通過字典為字符串模板中的 key 設(shè)置值。代碼如下:# 字符串模板中使用keytemp = '教程是:%(name)s, 價格是:%(price)010.2f, 出版社是:%(publish)s'book = {'name':'Python基礎(chǔ)教程', 'price': 99, 'publish': 'C語言中文網(wǎng)'}# 使用字典為字符串模板中的key傳入值print(temp % book)book = {'name':'C語言小白變怪獸', 'price':159, 'publish': 'C語言中文網(wǎng)'}# 使用字典為字符串模板中的key傳入值print(temp % book) """5、編寫一個函數(shù),提取指定字符串中所有的字母,然后拼接在一起產(chǎn)生一個新的字符串 ?
#編寫一個函數(shù),提取指定字符串中所有的字母,然后拼接在一起產(chǎn)生一個新的字符串def extract(s):a = []for i in range(len(s)):if (( 'a' < s[i] < 'z') or ( 'A'< s[i] < 'Z')):a.append(s[i])new = ''.join(a)return newif __name__ == '__main__':s = '234236sdvskjdhk: dsjkfh'print(extract(s))?6、寫一個函數(shù),求多個數(shù)的平均值
#寫一個函數(shù),求多個數(shù)的平均值# # def avg(*args):#因?yàn)椴恢纻魅攵嗌賯€值,所以用*arges代替,意思是可變的位置參數(shù)想,結(jié)果是一個元組 # s = sum(args[0])#sum() 方法對序列進(jìn)行求和計算 包括:列表、元組、集合 # #因?yàn)閭魅氲氖莻€列表,但是又變成了元組,即成了元組里面包含一個字典了,而需要的數(shù)據(jù)是元組的第一個位置的列表 # print(s) # avg = s / (len(args[0])) # # return avgdef avg(l):return (sum(l) / len(l))if __name__ == '__main__':l = []n = int(input('請輸入要計算的個數(shù):'))for i in range(n):k = int(input("請輸入數(shù)值: "))l.append(k)print(avg(l))7、寫一個函數(shù),默認(rèn)求10的階乘,也可以求其他數(shù)字的階乘 ?
#寫一個函數(shù),默認(rèn)求10的階乘,也可以求其他數(shù)字的階乘def Factorial(n):s = 1for i in range(1,n + 1):s *= ireturn sif __name__ == '__main__':n = int(input('請輸入要求的階乘'))print(Factorial(n))?
8、寫一個自己的capitalize函數(shù),能夠?qū)⒅付ㄗ址氖鬃帜缸兂纱髮懽帜??
例如: 'abc' -> 'Abc' ? '12asd' ?--> '12asd'
#寫一個自己的capitalize函數(shù),能夠?qū)⒅付ㄗ址氖鬃帜缸兂纱髮懽帜竏ef capitalize(s):a = []count = 0for i in range(len(s)):if ( 'a' < s[i] < 'z'):count +=1if (count <= 1):a.append(chr(ord(s[i]) - 32))continuea.append(s[i])t = ''.join(a)return aif __name__ == '__main__':s = '8576sdfhkj'print(capitalize(s))?9、寫一個自己的endswith函數(shù),判斷一個字符串是否已指定的字符串結(jié)束
例如: 字符串1:'abc231ab' 字符串2:'ab' 函數(shù)結(jié)果為: True
? ? ?字符串1:'abc231ab' 字符串2:'ab1' 函數(shù)結(jié)果為: False
10、寫一個自己的isdigit函數(shù),判斷一個字符串是否是純數(shù)字字符串 ?
例如: '1234921' ?結(jié)果: True
? ? ? '23函數(shù)' ? 結(jié)果: False
? ? ? 'a2390' ? ?結(jié)果: False
11、?寫一個自己的upper函數(shù),將一個字符串中所有的小寫字母變成大寫字母
例如: 'abH23好rp1' ? 結(jié)果: 'ABH23好RP1'
def upper(str1):str2 = ''for x in range(0, len(str1)):if 'a' <= str1[x] <= 'z':b = ord(str1[x]) - 32str2 += chr(int(b))else:str2 += str1[x]return str2str1 = input('請輸入一個字符串:') print(upper(str1))12、寫一個自己的rjust函數(shù),創(chuàng)建一個字符串的長度是指定長度,原字符串在新字符串中右對齊,剩下的部分用指定的字符填充 ?
例如: 原字符:'abc' ?寬度: 7 ?字符:'^' ? ?結(jié)果: '^^^^abc'
? ? ?原字符:'你好嗎' ?寬度: 5 ?字符:'0' ? ?結(jié)果: '00你好嗎'
13、?寫一個自己的index函數(shù),統(tǒng)計指定列表中指定元素的所有下標(biāo),如果列表中沒有指定元素返回-1
例如: 列表: [1, 2, 45, 'abc', 1, '你好', 1, 0] ?元素: 1 ? 結(jié)果: 0,4,6 ?
? ? ?列表: ['趙云', '郭嘉', '諸葛亮', '曹操', '趙云', '孫權(quán)'] ?元素: '趙云' ? 結(jié)果: 0,4
? ? ?列表: ['趙云', '郭嘉', '諸葛亮', '曹操', '趙云', '孫權(quán)'] ?元素: '關(guān)羽' ? 結(jié)果: -1 ?
14、寫一個自己的len函數(shù),統(tǒng)計指定序列中元素的個數(shù) ?
例如: 序列:[1, 3, 5, 6] ? ?結(jié)果: 4
? ? ?序列:(1, 34, 'a', 45, 'bbb') ?結(jié)果: 5 ?
? ? ?序列:'hello w' ? ?結(jié)果: 7
15、寫一個函數(shù)實(shí)現(xiàn)自己in操作,判斷指定序列中,指定的元素是否存在 ?
例如: 序列: (12, 90, 'abc') ? 元素: '90' ? ? 結(jié)果: False
? ? ?序列: [12, 90, 'abc'] ? 元素: 90 ? ? 結(jié)果: True?
16、寫一個自己的replace函數(shù),將指定字符串中指定的舊字符串轉(zhuǎn)換成指定的新字符串 ?
例如: 原字符串: 'how are you? and you?' ? 舊字符串: 'you' ?新字符串:'me' ?結(jié)果: 'how are me? and me?'
#寫一個自己的replace函數(shù),將指定字符串中指定的舊字符串轉(zhuǎn)換成指定的新字符串def str_replace(s1,s2,s3):str1 = ' 'i = 0while i < len(s1):if (s1[i] == s2[0]):if (s1[i:i + len(s2)] == s2):str1 += s3i += len(s2)else:str1 +=s1[i]i +=1else:str1 +=s1[i]i +=1return str1if __name__ == '__main__':str1 = 'how are you? Thank you!'str2 = 'you'str3 = 'me'print(str_replace(str1, str2, str3))17、寫一個自己的max函數(shù),獲取指定序列中元素的最大值。如果序列是字典,取字典值的最大值 ?
#寫一個自己的max函數(shù),獲取指定序列中元素的最大值。如果序列是字典,取字典值的最大值def max(list1):if (type(list1) == dict) :max_num = 0for x in list1:#取出的是字典的key值if max_num < list1[x]:max_num = list1[x]else:max_num = list1[0]for x in list1:if max_num < x:max_num = xreturn max_numif __name__ == '__main__':param1 = [-7, -12, -1, -9]print(max(param1))18、寫四個函數(shù),分別實(shí)現(xiàn)求兩個列表的交集、并集、差集、補(bǔ)集的功能 ?
def intersection(s1,s2):jiao_ji = []for x in s1:if x in s2:jiao_ji.append(x)return jiao_jidef union(s1,s2):bing_ji = []for x in s1:bing_ji.append(x)for y in s2:if y not in bing_ji:bing_ji.append(y)return bing_jidef difference(s1,s2):cha_ji = []for x in s1:if x not in s2:cha_ji.append(x)return cha_jidef complement(s1,s2):bu_ji = []for x in s2:if x not in s1:bu_ji.append(x)return bu_jiif __name__ == '__main__':list1 = [2, 4, 6, 8, 10, 12, 14, 16]list2 = [2, 4, 6, 8]print(intersection(list1, list2))print(union(list1, list2))print(difference(list1, list2))print(complement(list1, list2))?
總結(jié)
- 上一篇: Android系统换字体不root,一键
- 下一篇: setup.s 分析—— Linux-0