实验要求及解析源代码
一
使用普通函数和lambda分别实现加减乘除运算。
示例结果:
print("普通实现方式")
print("Select operation\n1.Add\n2.Subtract\n3.Multiply\n4.Divide")
option={'1':'+','2':'-','3':'*','4':'/'}
def operation (n,op1,op2):
if n=='1':
return op1+op2
elif n=='2':
return op1-op2
elif n=='3':
return op1*op2
elif n=='4':
return op1/op2
choice=input("Enter choice(1/2/3/4):")
fNumber=eval(input("Enter first number:"))
sNumber=eval(input("Enter second number:"))
outCome=operation(choice,fNumber,sNumber)
print(fNumber,option[choice],sNumber,"=",outCome)
print("lambda方式实现")
option={'1':'+','2':'-','3':'*','4':'/'}
operation={'1':lambda op1,op2:op1+op2,
'2':lambda op1,op2:op1-op2,
'3':lambda op1,op2:op1*op2,
'4':lambda op1,op2:op1/op2,}
choice=input("Enter choice(1/2/3/4):")
fNumber=eval(input("Enter first number:"))
sNumber=eval(input("Enter second number:"))
outCome = operation[choice](fNumber, sNumber)
print(fNumber, option[choice], sNumber, "=", outCome)
二
编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。(建议求素数过程也编写一个函数)如果存在多组符合条件的素数,则全部输出。(1.py)
示例结果:
def is_prime(n):
if n<2:
return False
for i in range(2,int(n/2)):
if n%i==0:
return False
return True
def is_TwoPrime(n):
list1=[]
for i in range(2,int(n/2+1)):
if is_prime(i) and is_prime(n-i):
list1.append((i,n-i))
return list1
number=eval(input("Please input your test number:"))
list1=is_TwoPrime(number)
for item in list1:
print(item[0],"+",item[1],"=",number)
三
模拟发红包游戏(3.py)
规则 :通过函数实现发红包游戏。要求:
自定义红包钱数,自定义接收红包的人数。随机生成每一笔,然后依次的在继续,最后剩下的分给最后一个人。
import random
price=eval(input("请输入红包钱数:"))
number=eval(input("请输入接收红包人数:"))
list1=[]
newRandom=0
newPrice=price
for i in range(number):
newRandom=random.randint(int(price/(1.5*number)),int(price/int(number/1.5)))
list1.append(newRandom)
newPrice=newPrice-newRandom
print(list1)
四
学习pgzero库,完成弹跳的小球的设计。(4.py)
import pgzrun
HEIGHT=600
WIDTH=800
y=100
x=100
speed_y=5
speed_x=3
r=30
def draw():
screen.fill('white')
screen.draw.filled_circle((x,y),r,'red')
def update():
global y,x,speed_y,speed_x
x=x+speed_x
y=y+speed_y
if y>=HEIGHT-r or y<=r:
speed_y=-speed_y
if x<=r or x>=WIDTH-r:
speed_x=-speed_x
y+=speed_y
x+=speed_x
pgzrun.go()
import pgzrun
from random import *
HEIGHT = 600
WIDTH = 800
balls = [] # 存放所有小球的列表
# 定义一个函数,用于生成一个随机的小球
def create_ball():
x = randint(0, WIDTH)
y = randint(0, HEIGHT)
r = randint(10, 30)
speed_x = randint(-5, 5)
speed_y = randint(-5, 5)
color = (randint(0, 255), randint(0, 255), randint(0, 255))
return {'x':x,'y':y,'r':r,'speed_x':speed_x,'speed_y':speed_y,'color':color}
# 初始化所有小球
for i in range(50):
balls.append(create_ball())
def draw():
screen.fill('white')
for ball in balls:
screen.draw.filled_circle((ball['x'],ball['y']),ball['r'],ball['color'])
def update():
global balls
# 更新每个小球的位置和速度
balls = list(map(lambda ball:{
'x': ball['x'] + ball['speed_x'],
'y': ball['y'] + ball['speed_y'],
'r': ball['r'],
'speed_x': ball['speed_x'],
'speed_y': ball['speed_y'],
'color': ball['color']
}, balls))
# 检测每个小球是否碰到边界并反弹
for ball in balls:
if ball['x']<=ball['r'] or ball['x']>=WIDTH-ball['r']:
ball['speed_x']=-ball['speed_x']
if ball['y']<=ball['r'] or ball['y']>=HEIGHT-ball['r']:
ball['speed_y']=-ball['speed_y']
pgzrun.go()
五
模拟轮盘赌游戏:
假设各奖项在轮盘上所占比例为:
‘一等奖’:0-0.08
‘二等奖’:0.08-0.3
‘三等奖’:0.3-1.0
以下包括递进的两个题目:
(1)转动轮盘(随机产生一个0-1的数),1万次,输出每个奖项的分布。(5-1.py)
示例结果:
提示1:使用字典来完成,首先写一个字典结构salary,来表示几等奖和它的概率。在构造一个字典now来表示中几等奖的情况(键为几等奖,值为次数)例如:
在这里插入图片描述
(2)模拟一个用户转动轮盘的过程:5-2.py(选做)
a.输出用户转动10次轮盘的奖项分布情况。
b.另外,已知积分:转到一等奖,得5分;转到二等奖,得3分;转到三等奖,得1分。输出用户转动10次的得分情况;
c. 根据积分领奖品 (自己构造奖项就可以)
如果大于等于30分,输出,奖励奥运会吉祥物
如果大于等于20分,小于30分,输出,奖励饮水壶
如果大于等于10分,小于20分,输出,奖励充电宝
如果大于等于0小于10分,输出,奖励魔盒
示例结果:
Attention:做(2)可以跳过(1)
import random
print("欢迎参加轮盘赌游戏")
salary={'一等奖':(0,0.08),'二等奖':(0.08,0.3),'三等奖':(0.3,1.0)}
reward={'一等奖':5,'二等奖':3,'三等奖':1}
award={(0,10):'魔盒',(10,20):'充电宝',(20,30):'饮水壶',(30,40):'吉祥物',}
total_score=0
prize_dict={} # 存储中奖情况的字典
for i in range(10):
rand=random.random()
for prize,scores in salary.items():
if scores[0]<=rand<scores[1]:
#print("第{}次中了{}".format(i+1,prize))
total_score+=reward[prize]
prize_dict[prize]=prize_dict.get(prize,0)+1 #更新中奖情况字典
print("您的中奖情况分布为:",prize_dict)
print("您本轮得分为:",total_score)
for item1,item2 in award.items():
if item1[0]<=total_score<item1[1]:
print("恭喜你得到{}一个!!!".format(item2))
实验截图
一
二
三
四