领略Python函数的魅力,设计“诚实勇敢”小游戏

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()

你可能感兴趣的:(领略Python函数的魅力,设计“诚实勇敢”小游戏)