例题引导:

【模拟轮盘抽奖游戏】

轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的,奖项设置如下:如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0.3)之间,代表2等奖,如果范围在[0, 1.0)之间,代表3等奖,

要求:假设本次活动1000人参加, 模拟游戏时各等级奖品个数需要准备多少个。

解题思路:定义游戏规则(用字典表达)-构建函数-生成随机数-编写游戏逻辑-调用函数-遍历1000名用户-打印输出

参考答案:

import random  #导入随机数模块

rewardDict = {
   '一等奖': (0, 0.08),
   '二等奖': (0.08, 0.3),
   '三等奖': (0.3, 1)
}      #因为该值为一对一映射,所以想到用字典定义得奖范围

def rewardFun():    #开始构建函数
   """用户得奖等级"""
   # 生成一个0~1之间的随机数
   num = random.random()
   # 判断随机转盘转的数是几等奖
   for k, v in rewardDict.items():  
       # 这里的v是元组
       if v[0] <= num < v[1]:
           return k

# print rewardFun()
resultDict = {}

for i in range(1000):
   # res:本次转盘的等级(一/二/三等奖)
   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

学习引导:

函数的概念

函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。它是编辑好的、可直接调用的、可重复使用的,用来实现单一或相关联功能的代码段

优点:

函数的定义

函数必须先创建才可以使用,该过程称为函数定义,使用函数的过程称为函数调用。

函数可以根据自己的需求来定义,但有一些规则需要注意:

函数定义的一般格式:

#函数定义的一般格式:
def 函数名 (参数列表)
   函数体

#实例1
def hello():
   print('Hello World')
   
hello()

#Hello World

实例2-计算圆的面积,带参数

#实例2-计算圆的面积,带参数
def area(r):
   pi=3.412
   return pi*(r^2)

r=5
print('圆的面积为:',area(r))

#圆的面积为: 23.884

函数调用

即使用函数的过程

简单的调用应用

#函数功能:打印该字符串
def println(str):
   print(str)
   return

#调用函数
println('调用上述函数')
println('打印这段字符串')
println('多次调用函数')

#调用上述函数
#打印这段字符串
#多次调用函数

参数调用

参数分为形参、实参

在实际代码中表示如下:

#定义时:
def func(a,b,c):
   pass

其中 a,b,c 为形参

#调用时:
func(1,2,3)
其中1,2,3为实参

形参:

只在被调用时,才分配存储单元。调用结束,立刻释放所分配的内存。

形参只在函数内部有效

实参:

可以是:常量、变量、表达式、函数

进行函数调用时c#随机数,实参必须是确定的值

位置参数:

def func(a,b,c):
   return a+b+c

#调用
print(func(2,3,4))  

#9

错误演示:

def func(a,b,c):
   return a+b+c

#调用
print(func(2,3)) #实参数量不对应,报错

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-21-38b482e25fef> in <module>
     3
     4 #调用
----> 5 print(func(2,3))
TypeError: func() missing 1 required positional argument: 'c'

关键参数:

def func(a,b,c):
   return a+b+c

#调用
print(func(4,c=3,b=2))  

#9

默认参数:

实例演示:

def info(name,age=18):
   print('名字:',name)
   print('年龄:',age)
   return

#调用
info(age=22,name='Jack')
print('****************')
info(name='Jack')

'''
名字: Jack
年龄: 22
*****************
名字: Jack
年龄: 18
'''

动态参数:* args ** kwargs

当你需要一个函数能处理很多参数,超过已声明的参数数量,这时就需要动态参数。与上述两中参数不同的是,该参数声明不需要命名。

* args

一个’* ‘的参数会以元组(tuple)的形式导入,存放未命名的变量参数

#函数定义
def printinfo(arg1,*vartuple):
   print('输出:')
   print(arg1)
   print(vartuple)
   
#调用
printinfo(34,45,32,12)

#输出:
#34
#(45, 32, 12)

如果函数调用时没有指定参数,动态参数则表现为空元组。

#函数定义
def printinfo(arg1,*vartuple):
   print('输出:')
   print(arg1)
   print(vartuple)
   
#调用
printinfo(34)

#输出:
#34
#()

** kwargs

还有一种动态参数,加了两个星号则以字典的形式导入

#函数定义
def printinfo(arg1,**vardict):
   print('输出:')
   print(arg1)
   print(vardict)
   
#调用
printinfo(34,a=45,b=32,c=12)

#输出:
#34
#{'a': 45, 'b': 32, 'c': 12}

声明函数时,参数中的* 可以单独出现。

如果* 单独出现,后面的参数必须以关键字传入

def func(a,b,*,c):
   return a+b-c

func(3,2,4)   #非关键字传入报错

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-34-f69556d382a4> in <module>
     2     return a+b-c
     3
----> 4 func(3,2,4)
TypeError: func() takes 2 positional arguments but 3 were given

关键字传入正确

func(3,4,c=5)  

#2

参数传递

python语言中,类型属于对象,变量是没有类型的,例如:

a=[1,2,3]

a=’DataScience’

其中[1,2,3]是list类型,’DataScience’是string类型,变量a没有类型,它只是一个对象的引用(一个指针),可以指向list类型对象也可以指向string类型对象

可更改(mutable)与不可更改(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

python 函数的参数传递:

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

#传不可变对象实例
#
#函数定义
def changeInt(a):
   a=10
   
#函数调用
b=5
changeInt(b)
print(b)

#5

实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。

#传可变对象实例
def changelist(List):
   #对传入的列表进行扩展
   List.append([1,2,3,4])
   print('函数内取值:',List)
   return

#函数调用
List=['datascience']
changelist(List)
print('函数外取值:',List)

#函数内取值: ['datascience', [1, 2, 3, 4]]
#函数外取值: ['datascience', [1, 2, 3, 4]]

可变对象在函数里修改了参数c#随机数,那么在调用这个函数的函数里,原始的参数也被改变了。

传入函数的和在末尾添加新内容的对象用的是同一个引用。

小作业

1.构造一个describe_pet函数,调用该函数输入以下2只宠物的信息:

I have a cat. My cat’s name is Monkey.

I have a lizard. My lizard’s name is Cola.

2.编写函数, 接收一个列表(包含10个整形)和一个整形k, 返回一个新列表,要求: – 将列表下标k之前对应(不包含k)的元素逆序; – 将下标k及之后的元素逆序;

3.请用函数实现一个判断用户输入的年份是否是闰年的程序

4.构造一个greeting函数,调用函数并使用循环,对输入的参数返回整理后的greeting信息。

例如,在控制台分别输入名字“Mary”和姓“Chen”,调用函数后输出”Hello, Mary Chen!”,并提示输入下一组姓和名。直到控制台输入姓或名为“end”时,程序结束。

好文章,我在看❤

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688