定義函數
1.定義與調用
輸出hello
def hello():
print('hello')
hello()
# 函數中定義函數 並調用
def westos():
print('westos')
def python():
print('python')
python()
westos()
2.參數類型
參數類型:形參、位置參數、默認參數、可變參數、關鍵字參數
形參
#形參
def Welcome(a):
print('hello',a)
Welcome('yueyue')
位置參數
# 位置參數
def genInfo(name,age):
print(name,age)
genInfo(23, 'yueyue')
genInfo('yueyue',23) #注意順序
genInfo(name='yueyue',age=23)
默認參數
#默認參數
def mypow(x,y=2):
print(x**y) #x的y次方
mypow(3)
mypow(2,3) #有參數就用,沒有就用默認的
可變參數
# 可變參數
def mysum(*a):
sum =0
for i in a:
sum +=i
print(sum)
mysum(1,2,3)
關鍵字參數
#關鍵字參數
def getInfo(name,age,**kwargs):
print(name,age)
print(kwargs)
getInfo('yueyue',23,id='002',favorite=['play','eating'])
3.函數的的返回值、及變量
返回值
#返回值
def mypow(x,y=3):
return x**y,x+y
a,b =mypow(3)
print(a,b)
局部變量:在函數內部定義的變量,只在函數內部起作用,函數執行結束,變量會自動刪除
全局變量
a=1
print('outside:',id(a))
def fun():
global a #申明爲全局變量
a =5
print('inside:',id(a))
fun()
print(a)
print(id(a))
練習
** 案例1:
編寫一個函數cacluate, 可以接收任意多個數,返回的是一個元組.
元組的第一個值爲所有參數的平均值, 第二個值是大於平均值的所有數.
#1.
def cacluate(*nums):
avg = sum(nums) / len(nums)
up_nums =[]
for i in nums:
if i>avg:
up_nums.append(i)
return avg,up_nums
a = cacluate(1,2,3,4,5,6)
print(a)
**案例2:
編寫一個函數, 接收字符串參數, 返回一個元組,'ehllo WROLD'
元組的第一個值爲大寫字母的個數, 第二個值爲小寫字母個數.
def fun(x):
upper_count=0
lower_count=0
for i in x:
if i.isupper():
upper_count +=1
elif i.islower():
lower_count+=1
else:
continue
return upper_count,lower_count
a=fun('hello WORLD')
print(a)
**案例3:
編寫函數, 接收一個列表(包含30個1~100之間的隨機整形數)和一個整形
數k, 返回一個新列表.
函數需求:
- 將列表下標k之前對應(bu包含k)的元素逆序;
- 將下標k及之後的元素逆序;
[1,2,3,4,5] 2 [2,1,5,4,3]
def fun(li,k):
if k<0 or k>len(li):
return 'error'
else:
return li[:k][::-1]+li[k:][::-1]
print(fun([1,2,3,4,5],2))
模擬輪盤抽獎遊戲
輪盤分爲三部分: 一等獎, 二等獎和三等獎;
輪盤轉的時候是隨機的,
如果範圍在[0,0.08)之間,代表一等獎,
如果範圍在[0.08,0.3)之間,代表2等獎,
如果範圍在[0.3, 1.0)之間,代表3等獎,
模擬本次活動1000人蔘加, 模擬遊戲時需要準備各等級獎品的個數.
import random
rewardDict = {
'一等獎': (0,0.08),
'二等獎': (0.08,0.3),
'三等獎': (0.3,1)
}
def userfun():
num = random.random()
for k,v in rewardDict.items():
if v[0] <= num <= v[1]:
return k
resultDict = {}
for i in range(1000):
res = userfun()
if res not in resultDict:
resultDict[res] = 1
else:
resultDict[res] += 1
for k,v in resultDict.items():
print(k,':',v)
騰訊筆試編程題:
題目需求:
對於一個十進制的正整數, 定義f(n)爲其各位數字的平方和,如:
f(13) = 1**2 + 3**2 = 10
f(207) = 2**2 + 0**2 + 7**2 = 53
下面給出三個正整數k,a, b,你需要計算有多少個正整數n滿足a<=n<=b,
且k*f(n)=n
輸入:
第一行包含3個正整數k,a, b, k>=1, a,b<=10**18, a<=b;
輸出:
輸出對應的答案;
範例:
輸入: 51 5000 10000
輸出: 3
def fun(n):
sum =0
n= str(n)
for item in n:
sum += int(item) ** 2
return sum
print(fun(13))
s = input('input:')
li = []
for item in s.split():
li.append(int(item))
k,a,b =li
count = 0
for i in range(a,b+1):
if k*fun(i) == i:
count+=1
print(count)