Hello,小数先生粗线啦~~~今天教大家设计诚实勇敢小游戏
先看下游戏效果(文中最后有诚实勇敢游戏代码)
诚实勇敢游戏
函数是什么?
描述:函数是组织好的、可以重复使用的、用来实现单一功能的代码
在之前的课堂中经常使用的"打印"功能print(),就是Python内置的函数(设定好的,可以直接拿过来用)
以print()函数为例,它是设定好可以直接使用(组织好的),无论打印什么参数都可以(重复使用),只能实现“打印”功能(单一功能)
定义函数
例
defgreet(name):print('Mornig'+name)return
注:greet翻译过来是打招呼,这里函数名写法不固定,规范的写法是大家可以读懂。
第一行代码:
def的意思是定义(define),greet是函数名(自己取得),再搭配一个括号和冒号,括号里面的name是参数(参数名也是自己取)
第二行代码:
def下一行开始缩进的代码是函数要实现的功能,也叫函数体。这里的函数体展现出的是“打印Morning+name”这句话
第三行代码
函数内部一旦遇到return语句,就会停止执行并返回结果。没有return语句的函数,Python也会在末尾隐形地加上return None,即返回None值
定义函数的注意事项
函数名:最好是取体现函数功能的名字,一般用小写字母和单下划线、数字等组合
参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
规范:括号是英文括号,后面的冒号不能丢
函数体:函数体就是体现函数功能的语句,要缩进,一般是四个空格
运行一下这段函数
def greet(name):
print('Mornig'+name)
return
输出
可以看到终端什么都没有输出,那是因为目前只定义了函数(将函数的内部功能封装起来),只有调用的时候才会运行
调用函数
通俗来讲,所谓函数,就是指为一段实现特定功能的代码“取”一个名字,以后即可通过该名字和参数对应的值来执行(调用)该函数
例
# 没有参数,直接调用函数名
def greet1():
print('Mornig,小数先生粗线啦~~~')
# 需要给参数name赋值,每次调用都可以给参数赋不同的值
def greet2(name):
print('Moring,'+name)
# 需要给参数name1和name2赋值
def greet3(name1, name2):
print('Mornig,'+name1)
print('Hello,'+name2)
greet1()
greet2('至尊宝')
greet3('至尊宝','紫霞仙子')
输出
Mornig,小数先生粗线啦~~~
Moring,至尊宝
Mornig,至尊宝
Hello,紫霞仙子
参数类型
主要的参数类型:位置参数、默认参数、不定长参数
例
def introduce(name, age):
print('名字:'+name)
print('年龄:'+age)
introduce('小数先生','18')
输出
名字:小数先生
年龄:18
“小数先生”和“18”是对应参数name和age的位置顺序传递的,所以被叫做位置参数
之前的函数使用一段时间感觉信息不够全面,想给每个人添加一个所在城市。假设目前大多数人都是在杭州,这时就可以用到默认函数
例
def introduce(name, age, city='杭州'):
print('名字:'+name)
print('年龄:'+age)
print('城市:'+city)
introduce('小数先生','18')
输出
名字:小数先生
年龄:18
城市:杭州
注:一个参数的值是相对固定的,那么设置默认参数就免去了每次都要传递的麻烦。并且默认参数是可以被改变的
例
def introduce(name, age, city='杭州'):
print('名字:'+name)
print('年龄:'+age)
print('城市:'+city)
introduce('至尊宝','28','银川')
输出
名字:至尊宝
年龄:28
城市:银川
再后来,感觉信息还是不够全面,要加上个人爱好,不过每个人兴趣爱好(数量)都不相同,这时就可以用到不定长参数
格式:一个星号 * 加上个参数名
例
def introduce(name, age, *hobby, city='杭州'):
print('名字:'+name)
print('年龄:'+age)
print('城市:'+city)
for i in hobby:
print('爱好:'+i)
introduce('小数先生','18','Python','大数据','电竞')
输出
名字:小数先生
年龄:18
城市:杭州
爱好:Python
爱好:大数据
爱好:电竞
注:默认参数要放在不定长参数(*hobby)的后面
return语句
当输入参数给函数,函数就会返回一个值
例
name = '小数先生'
print(len(name))
输出
4
注:当把参数name放进len()函数中,返回来的是4这个值(字符串的长度),然后用print函数打印出来(也可以用作其他用途)
自定义函数,可以用return语句规定该函数要返回什么
例
def greet(name):
if name == '小数先生':
return 'Moring,小数先生~~~'
else:
return 'Moring,中国'
print(greet('小数先生'))
输出
Moring,小数先生~~~
注:return只是将指定数据返回,但不会打印。是由pirnt()函数打印出来的
return特性
a.如果不是立刻要求对函数返回值做操作,那么可以使用return语句保留返回值
例
def face(name):
return name + '的脸蛋'
def body(name):
return name + '的身材'
print('我的梦中情人:'+face('李若彤')+'+'+body('林志玲'))
输出
我的梦中情人:李若彤的脸蛋+林志玲的身材
b.需要多次调用函数时,可以再定义一个主函数main(),调用非主函数的返回值
例
c.Python的函数返回值可以是多个,多个返回值的数据类型是元组(tuple)
例
def lover(name1, name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face,body
features = lover('李若彤','林志玲')
# 此时return的值为元组 Features = ('李若彤的脸蛋', '林志玲的身材')
print('我的梦中情人:'+features[0]+'+'+features[1])
输出
我的梦中情人:李若彤的脸蛋+林志玲的身材
d.没有return语句的函数会默认返回None
例
def greet():
name = '小数先生'
print(greet())
输出
None
e.一旦函数内部遇到return语句,就会停止执行并返回结果
例
def func():
return 'Moring'
return 'Noon'
print(func())
输出
Moring
函数内部遇到第一个return就会返回,所以只会打印'Moring'
return语句总结图
变量作用域
a.在一个函数内定义的变量仅能在函数内部使用(局部作用域),称作局部变量
b.在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),称作全局变量
例
n = 99 # 全局变量n
def num():
n = 88 # 局部变量n
print(n)
num()
# 打印局部变量n
print(n)
# 打印全局变量n
输出
88
99
注:虽然变量的名字相同(都是n),但因为全局变量和局部变量处在不同的"作用域"中,它们彼此井水不犯河水。建议局部变量和全局变量不要取相同的名字
当变量处于被定义的函数内时,就是局部变量,只能在这个函数内被访问;当变量处于被定义的函数外时,就是全局变量,可以在程序中的任何位置被访问
例
n = 99
def num():
print(n)
num()
输出
99
例
def num():
n = 88
print(n)
num()
print(n)
输出
NameError: name 'n' is not defined
报错信息:变量n并没有被定义。只是在函数num()内定义的,不能在全局作用域中使用这个局部变量
今天的知识点很多,因为函数是Python里非常重要的工具,小数先生建议大家理解之后再去学习下一篇文章
诚实勇敢游戏源代码
import random
import time
honest_list = ['最喜欢在座哪位异性?',
'愿意为爱牺牲到什么程度?',
'做过最丢人的事情是什么?',
'如果在这群人里选一个人结婚,你选谁?',
'你想做而不敢做的事情是什么?']
brave_list = ['抓着铁门大喊,放我出去!',
'深情地吻墙10秒',
'绕指定地点跑一圈,边跑边喊,我再也不尿床了',
'做一个大家都满意的鬼脸',
'模仿脑白金广告,边跳边唱',
'对外面大喊“我好寂寞啊”']
def choice_honest():
'''选择诚实时的惩罚'''
punishment_h = random.choice(honest_list)
print('-'*40)
print(punishment_h)
print('-'*40)
def choice_brave():
'''选择勇敢时的惩罚'''
punishment_b = random.choice(brave_list)
print('-'*50)
print(punishment_b)
print('-'*50)
def add_player():
'''确定参与者'''
players_list = []
print('-'*30 + '准备迎接诚实勇敢的挑战吧' + '-'*30)
while True:
name = input('请输入参与者姓名(退出输入n):')
if name == 'n':
break
players_list.append(name)
time.sleep(0.5)
return players_list
def choice_player(players):
'''抽取玩家'''
players_list = players
punished_player = random.choice(players_list)
time.sleep(1)
print(' ')
print('被抽中的玩家是【{}】 ╮( ̄▽  ̄)╭'.format(punished_player))
print(' ')
player_choice = input('{}选择 1.诚实 2.勇敢(输入数字):'.format(punished_player))
time.sleep(1)
if player_choice == '1':
choice_honest()
elif player_choice == '2':
choice_brave()
else:
print('没有其他选项,接受惩罚吧')
choice_brave()
def main():
players = add_player()
while True:
choice_player(players)
twich = input('重新开始游戏按回车,退出游戏输入n:')
if twich == 'n':
break
main()