案例1:
编写一个名为collatz()的函数,它有一个名为number的参数
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印3*number+1
def collatz(number):
# if number % 2 == 0:
# print number // 2
# else:
# print 3 * number + 1
print number // 2 if number % 2 == 0 else 3 * number + 1
collatz(2)
升级:然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:
3
- 输出:
10
5
16
8
4
2
1
#升级版
def collatz(number):
if number == 1:
exit(0)
elif number%2 == 0:
return number//2
else:
return 3*number+1
num=int(raw_input('n:'))
while True:
num=collatz(num)
print num
案例2:
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数
def caculate(*args):
avg = sum(args) /len(args)
list=[]
for i in args:
if i>avg:
list.append(i)
return avg,list
a=caculate(1,2,3,4)
print a
案例3:
编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(不包含k)的元素逆序;
- 将下标k及之后的元素逆序;
import random
def fun(alist,k):
if k<0 or k>len(alist):
return "error key"
else:
newL1=alist[:k]
newL2=newL1[::-1]
newL3=alist[k:]
newL4=newL3[::-1]
return newL2+newL4 # 可由return alist[:k][::-1] + alist[k:][::-1]替代
li=[]
for i in range(30):
num=random.randint(1,100)
li.append(num)
print li
a=fun(li,4)
print a
案例四:模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[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 rewardFun():
num=random.random() #生成0-1之间的随机数
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]=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
范例:
输入: 51 5000 10000
输出: 3
def f(n):
n=str(n)
sum=0
for i in n:
sum+=int(i)**2
return sum
s=raw_input('请输入(k,a,b):')
li=[]
for i in s.split():
li.append(int(i))
k,a,b=li
count = 0
for i in range(a,b+1):
if k*f(i)==i:
count +=1
print count
案例6.编写一个函数, 接收一个字符串参数, 返回一个元组,'ehllo WROLD'
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
def fun(*args):
count = 0
count1 = 0
for i in args:
if i.islower():
count += 1
if i.isupper():
count1 += 1
return count,count1
a=raw_input('输入一个字符串:')
b=fun(*a)
print b
案例7:.打字软件正确率
编写函数, 计算字符串匹配的准确率.(类似于打字软件)
orginStr为原始内容, userStr为用户输入内容
def accurate(originStr):
count=0
print(originStr)
userStr = raw_input('Please spell:')
origin_list = originStr.split()
user_list = userStr.split()
if originStr == userStr:
return '100%'
else:
for i in range(len(origin_list)):
if user_list[i] == origin_list[i]:
count += 1
percentage = count/len(origin_list)*100
return '%.2f%%'%percentage
per=accurate('hello world')
print (per)
案例8:打地鼠游戏
编写代码模拟打地鼠的小游戏,
假设一共有五个洞口,老鼠在里面随机一个洞口;
人随机打开一个洞口,如果有老鼠,代表抓到了
如果没有,继续打地鼠;但是地鼠会跳到其他洞口。
def fun():
mouse=random.randint(1,5)
player=raw_input('输入你的选择:')
return mouse == player
print '游戏开始'
for i in range(5):
re = fun()
if re == True :
print '赢了'
break
else:
print 'loser,please continue'
else:
print 'game over'