python实验五:函数

实验要求及解析源代码

使用普通函数和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))

实验截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值