一、定義函數(shù)
# 定義函數(shù)def say_hello(): print('hello') print('hi') # 調(diào)用函數(shù),函數(shù)被調(diào)用之后才會(huì)生效say_hello()1234567
二、求和函數(shù)
def sum_(): num1 = 2 num2 = 3 result = num1 + num2 print('%d + %d = %d' %(num1,num2,result))sum_()123456
三、函數(shù)里嵌套函數(shù)
def hello(): print('say hello') def hi(): # 內(nèi)函數(shù)必須調(diào)用才會(huì)被使用 print('say hi') hi()hello()123456
四、形參與實(shí)參
# 定義函數(shù)的時(shí)候定義的變量為形參(名字可以任意)def welcome(a): print('hello',a) # 真實(shí)的數(shù)據(jù)信息,調(diào)用函數(shù)的時(shí)候傳遞的參數(shù)為實(shí)參welcome('lala')welcome('haha')123456
五、四大參數(shù)
1、位置參數(shù):
# 1.位置參數(shù):形參和實(shí)參個(gè)數(shù)必須保持一致,最好按位置傳參def getInfo(name,age): print(name,age) # 調(diào)用函數(shù)getInfo('haha',11) getInfo(name='lala',age=18)1234567
2、默認(rèn)參數(shù):
def mypow(x,y=2): # y的默認(rèn)參數(shù)為2 print('乘積為:',x**y ) mypow(3) # 調(diào)用函數(shù)時(shí),如果給y賦值,則y就取賦的值,如果沒有給y賦值,則y就用默認(rèn)值mypow(2,4)12345
3、可變參數(shù):、
def mynum(*a): """ *a 是可變參數(shù) a 是元組數(shù)據(jù)類型 """ sum = 0 for i in a: sum += i print('求和為:',sum)mynum(1,2,3,4,5)123456789
4、關(guān)鍵字參數(shù)
def getStuInfo(name,age,**kwargs): """ **kwargs是一個(gè)字典,可以傳遞任意多的key-value """ print(name,age) print(kwargs)getStuInfo('lala','18',subject= ['math','english','chinese'])1234567
六、函數(shù)的返回值
返回值:函數(shù)運(yùn)行的結(jié)果,還需要進(jìn)一步操作時(shí),給返回值return用來返回函數(shù)執(zhí)行結(jié)果, 如果沒有返回值,默認(rèn)為None,python可以間接返回多個(gè)值(返回了一個(gè)元組)一旦遇到return,函數(shù)執(zhí)行結(jié)束,后面的代碼不會(huì)執(zhí)行 。
def mypow(x,y): return x**y,x+y a,b = mypow(2,3)print('x**y的值為:',a,'\nx+y的值為:',b)1234
七、變量的作用域
(1)局部變量:在函數(shù)內(nèi)部定義的變量,只在函數(shù)內(nèi)部生效,函數(shù)執(zhí)行結(jié)束之后,變量自動(dòng)刪除(2)全局變量a=1 # 此處的a表示全局變量print('outside:',id(a))def fun(): # global表示聲明局部變量為全局變量 global a a=5 print('inside:',id(a))fun()print(a)print(id(a))123456789101112
八、練習(xí)
1、編寫函數(shù),接收一個(gè)列表(包含30個(gè)1~100之間的隨機(jī)整型數(shù))和一個(gè)整型數(shù)k,返回一個(gè)新列表函數(shù)
需求:
1.將列表下標(biāo)k之前對應(yīng)(不包含k)的元素逆序
2.將下標(biāo)k及之后的元素逆序
[1,2,3,4,5] 2 [2,1,5,4,3]
b = []for i in range(30): b.append(random.randint(1, 100))print(b)def nixu(b1,k): if k<0 or k>len(b1): return 'Error key' print(k) return b1[:k][::-1]+b1[k:][::-1]print(nixu(b,8)) 12345678910
2、編寫一個(gè)函數(shù)calculate,可以接收任意多個(gè)數(shù),返回的是一個(gè)元組,元組的第一個(gè)值為所有參數(shù)的平均值,第二個(gè)值是大于平均值的所有數(shù)
def calculate(*a): sum = 0 b=[] for i in a: sum += i ave = sum / len(a) for i in a: if i > sum / len(a): b.append(i) return ave,b print(calculate(1,2,3,4,5))1234567891011
3、編寫一個(gè)函數(shù),接收字符串參數(shù),返回一個(gè)元組,‘hello WORLD’,元組的第一個(gè)值為大寫字母的個(gè)數(shù),第二個(gè)值為小寫字母個(gè)數(shù)
def receive(a): big = 0 small = 0 for i in a: if i.isupper(): big+=1 if i.islower(): small+=1 return big,smallprint(receive(input('請輸入字符串:')))12345678910
4、模擬輪盤抽獎(jiǎng)游戲
輪盤分為三部分:一等獎(jiǎng),二等獎(jiǎng),三等獎(jiǎng);輪盤轉(zhuǎn)的時(shí)候是隨機(jī)的
如果范圍在[0,0.08)之間,代表一等獎(jiǎng)
如果范圍在[0.08,0.3)之間,代表二等獎(jiǎng)
如果范圍在[0.3,1)之間,代筆三等獎(jiǎng)
模擬本次活動(dòng)1000人參加,模擬游戲時(shí)需要準(zhǔn)備各的等級獎(jiǎng)品的個(gè)數(shù)
# 第一種方法import randomdef award(people): a1=0 a2=0 a3=0 for i in range(people): num = random.random() if num < 0.08: a1+=1 elif num >= 0.08 and i <0.3: a2+=1 else: a3+=1 return a1,a2,a3dic = {}people = int(input('請輸入?yún)⒓踊顒?dòng)的人數(shù):'))a1,a2,a3 = award(people)dic={'一等獎(jiǎng)':a1,'二等獎(jiǎng)':a2,'三等獎(jiǎng)':a3}print(dic)1234567891011121314151617181920
# 第二種方法: def rewardFun(): """用戶得獎(jiǎng)等級""" # 生成一個(gè)0~1之間的隨機(jī)數(shù) num = random.random() # 判斷隨機(jī)轉(zhuǎn)盤轉(zhuǎn)的是幾等獎(jiǎng) for k,v in rewardDict.items(): if v[0] <= num < v[1]: return k resultDict = {}for i in range(1000): res = rewardFun() if res not in resultDict: resultDict[res] = 1 else: resultDict[res] += 1for k,v in resultDict.items(): print(k,v)123456789101112131415161718
4、騰訊筆試題:
題目需求:
對于一個(gè)十進(jìn)制的正整數(shù),定義f(n)為其各位數(shù)字的平方和,
如: f(13)=12+32=10 f(207)=22+32
下面給出三個(gè)正整數(shù)k,a,b,你需要計(jì)算有多少個(gè)正整數(shù)n滿足a<=n<=b,
且k*f(n)=n
例如:
輸入:51 5000 10000
輸出:3
def f(n): # 先把數(shù)字轉(zhuǎn)換為字符串 n=str(n) # 計(jì)算字符串中每個(gè)數(shù)的平方 sum = 0 for i in n: sum += int(i) ** 2 return sum # 接收變量k,a,bs=input('請輸入元素:')# 存儲(chǔ)整型k,a,bli = []for i in s.split(): # 分離輸入的字符串 li.append(int(i)) k,a,b = li # 進(jìn)行判斷是否滿足條件count = 0for i in range(a,b+1): if k*f(i) == i: print('輸出滿足條件的數(shù):',i) count+=1print('統(tǒng)計(jì)出來的個(gè)數(shù)為:',count)12345678910111213141516171819202122232425