Python编程:从入门到实践——【作业】——第八章(函数)

Stella981
• 阅读 742

第八章作业

8-1 消息 : 编写一个名为display_message() 的函数, 它打印一个句子, 指出你在本章学的是什么。 调用这个函数, 确认显示的消息正确无误。
8-2 喜欢的图书 : 编写一个名为favorite_book() 的函数, 其中包含一个名为title 的形参。 这个函数打印一条消息, 如One of my favorite books is
Alice in Wonderland 。 调用这个函数, 并将一本图书的名称作为实参传递给它。

8-1

def display_message():
    '''定义函数'''
    print('类似于定义一个x输出y的函数类型')
display_message()

输出;类似于定义一个x输出y的函数类型

8-2

def favorite_book(title ):
    print('One of my favorite books is ' + title.title())
favorite_book('alice in wonderland')

输出:
One of my favorite books is Alice In Wonderland

8-3 T恤 : 编写一个名为make_shirt() 的函数, 它接受一个尺码以及要印到T恤上的字样。 这个函数应打印一个句子, 概要地说明T恤的尺码和字样。
使用位置实参调用这个函数来制作一件T恤; 再使用关键字实参来调用这个函数。
8-4 大号T恤 : 修改函数make_shirt() , 使其在默认情况下制作一件印有字样“I love Python”的大号T恤。 调用这个函数来制作如下T恤: 一件印有默认字样的大号T
恤、 一件印有默认字样的中号T恤和一件印有其他字样的T恤( 尺码无关紧要) 。
8-5 城市 : 编写一个名为describe_city() 的函数, 它接受一座城市的名字以及该城市所属的国家。 这个函数应打印一个简单的句子, 如Reykjavik is in
Iceland 。 给用于存储国家的形参指定默认值。 为三座不同的城市调用这个函数, 且其中至少有一座城市不属于默认国家。

 8-3

def make_shirt(recive_size,shirt_words):
    '''接受一个尺码以及要印到T恤上的字样'''
    print('我接受一个' + recive_size + '码')
    print('要印到T恤上的字样是' + shirt_words)
make_shirt(recive_size='XL',shirt_words='曹富最帅')


输出:
我接受一个XL码
要印到T恤上的字样是曹富最帅

 8-4

def make_shirt(recive_size,shirt_words='I love Python'):
    '''接受一个尺码以及要印到T恤上的字样'''
    print('\n我接受一个' + recive_size + '码')
    print('要印到T恤上的字样是' + shirt_words + '!')
make_shirt(recive_size='大号')
make_shirt(recive_size='中号')
make_shirt(recive_size='小号')

输出:
我接受一个大号码
要印到T恤上的字样是I love Python!

我接受一个中号码
要印到T恤上的字样是I love Python!

我接受一个小号码
要印到T恤上的字样是I love Python!

 8-5

def describe_city(citv_name,city_country='Iceland'):#默认值是等于号
    '''接受一座城市的名字以及该城市所属的国家'''
    print(citv_name.title() + ' is in ' + city_country.title())
describe_city(citv_name='Reykjavik')
describe_city(citv_name='aierlan')
describe_city(citv_name='beijing',city_country='china')


输出:
Reykjavik is in Iceland
Aierlan is in Iceland
Beijing is in China

8-6 城市名 : 编写一个名为city_country() 的函数, 它接受城市的名称及其所属的国家。 这个函数应返回一个格式类似于下面这样的字符串:

"Santiago, Chile"

  答:

def city_country(city,country):
      message = city.title() + ',' + country.title()
      return message
print(city_country('beijing','china'))

输出:
Beijing,China

8-7 专辑 : 编写一个名为make_album() 的函数, 它创建一个描述音乐专辑的字典。 这个函数应接受歌手的名字和专辑名, 并返回一个包含这两项信息的字典。 使
用这个函数创建三个表示不同专辑的字典, 并打印每个返回的值, 以核实字典正确地存储了专辑的信息。
给函数make_album() 添加一个可选形参, 以便能够存储专辑包含的歌曲数。 如果调用这个函数时指定了歌曲数, 就将这个值添加到表示专辑的字典中。 调用这个
函数, 并至少在一次调用中指定专辑包含的歌曲数。
8-8 用户的专辑 : 在为完成练习8-7编写的程序中, 编写一个while 循环, 让用户输入一个专辑的歌手和名称。 获取这些信息后, 使用它们来调用函
数make_album() , 并将创建的字典打印出来。 在这个while 循环中, 务必要提供退出途径。

 8-7 要求一

def make_album(songer_name,album_name,total_songs=''):
    '''创建一个描述音乐专辑的字典'''
    music = {'songer':songer_name,'album':album_name}
    return music
mussican = make_album('zhoujielun','qilixiang')
print(mussican)
mussican = make_album('chenyixun','meigui')
print(mussican)
mussican = make_album('naying','heiye')
print(mussican)

输出:
{'songer': 'zhoujielun', 'album': 'qilixiang'}
{'songer': 'chenyixun', 'album': 'meigui'}
{'songer': 'naying', 'album': 'heiye'}

 要求二

def make_album(songer_name,album_name,total_songs=''):
    '''创建一个描述音乐专辑的字典'''
    if total_songs:
        full_word = songer_name + ' ' + album_name + ' ' + total_songs
    else:
        full_word = songer_name + ' ' + album_name
    return full_word.title()#函数返回
mussican = make_album('zhoujielun','qilixiang')
print(mussican)
mussican = make_album('chenyixun','meigui')
print(mussican)
mussican = make_album('naying','heiye','6shou')
print(mussican)


输出:
Zhoujielun Qilixiang
Chenyixun Meigui
Naying Heiye 6Shou

 8-8

def make_album(songer_name,album_name):
    '''创建一个描述音乐专辑的字典'''
    full_ablum = {'songer_name':songer_name,'album_name':album_name}#是这个函数的定义
    return full_ablum  #函数的信息返回
while True:
    print('音乐专辑')
    print("(enter 'q' at any time to quit)")
    songer_name = input('请输入歌手名:')#注意是每个判断,不是到下面之后再判断
    if songer_name ==  'q':
        break
    album_name = input('请输入专辑名:')
    if album_name ==  'q':
        break

    print(make_album(songer_name,album_name))#自己对整个语句的理解不透彻,导致此处错误一直没弄对,最后这里的打印也是在while循环里面




输出;
音乐专辑
(enter 'q' at any time to quit)
请输入歌手名:zhoujielun
请输入专辑名:qilixiang
{'songer_name': 'zhoujielun', 'album_name': 'qilixiang'}
音乐专辑
(enter 'q' at any time to quit)
请输入歌手名:q

8-9 魔术师 : 创建一个包含魔术师名字的列表, 并将其传递给一个名为show_magicians( ) 的函数, 这个函数打印列表中每个魔术师的名字。
8-10 了不起的魔术师 : 在你为完成练习 8-9而编写的程序中, 编写一个名为make_great( ) 的函数, 对魔术师列表进行修改, 在每个魔术师的名字中都加入字样“the
Great”。 调用函数show_magicians( ) , 确认魔术师列表确实变了。
8-11 不变的魔术师 : 修改你为完成练习 8-10而编写的程序, 在调用函数make_great( ) 时, 向它传递魔术师列表的副本。 由于不想修改原始列表, 请返回修改后的
列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用show_magicians( ) , 确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字
样“the Great”的魔术师名字。
8-9

def show_magicians(names):
    '''打印列表中每个魔术师的名字。'''
    for name in names:
        msg = ('Hello, ' + name + '!')
        print(msg)
#print('Hello' + name),这样打印不出来,必须定义一个函数,其实也行的
names=['caofu','wangshi','xijinp']
show_magicians(names)

输出:
Hello, caofu!
Hello, wangshi!
Hello, xijinp!

8-10

magicians = ['caofu','wangshi','xijinp']
great_magicians = []
def make_great(magicians,great_magicians):
      while magicians:
            magician = magicians.pop()
            great_magician = 'the Great ' + magician
            great_magicians.append(great_magician)
def show_magicianslis(great_magicians):
      for name in great_magicians:
            print(name)
make_great(magicians,great_magicians)
show_magicianslis(great_magicians)#自己确实没有做好


输出:the Great xijinp
the Great wangshi
the Great caofu

8-11

magicians = ['caofu','wangshi','xijinp']
great_magicians = []
def make_great(magicians,great_magicians):
      while magicians:
            magician = magicians.pop()
            great_magician = 'the Great ' + magician
            great_magicians.append(great_magician)
def show_magicianslis(great_magicians):
      for name in great_magicians:
            print(name)
make_great(magicians[:],great_magicians)#在magicians后添加[:]啊,因为之前是这个列表有数字啊
show_magicianslis(great_magicians)#
show_magicianslis(magicians)#意思在函数1里调用的只是magicians的副本


输出;
the Great xijinp
the Great wangshi
the Great caofu
caofu
wangshi
xijinp

8-12 三明治 : 编写一个函数, 它接受顾客要在三明治中添加的一系列食材。 这个函数只有一个形参(它收集函数调用中提供的所有食材) , 并打印一条消息, 对顾客
点的三明治进行概述。 调用这个函数三次, 每次都提供不同数量的实参。
8-13 用户简介 : 复制前面的程序user_profile.py, 在其中调用build_profile( ) 来创建有关你的简介; 调用这个函数时, 指定你的名和姓, 以及三个描述你的键-值
对。
8-14 汽车 : 编写一个函数, 将一辆汽车的信息存储在一个字典中。 这个函数总是接受制造商和型号, 还接受任意数量的关键字实参。 这样调用这个函数: 提供必不可
少的信息, 以及两个名称—值对, 如颜色和选装配件。 这个函数必须能够像下面这样进行调用:

car = make_car(' subaru' , ' outback' , color=' blue' , tow_package=True)

答:8-12

def sandwichs(*toppings):
    '''接受顾客要在三明治中添加的一系列食材'''
    print (toppings)
sandwichs('咖喱')
sandwichs('牛肉','鸡腿')
sandwichs('咖喱','牛肉','鸡腿')


输出:
('咖喱',)
('牛肉', '鸡腿')
('咖喱', '牛肉', '鸡腿')

8-13

def build_profile(first, last, **user_info) :
    """创建一个字典, 其中包含我们知道的有关用户的一切"""
    profile = {}
    profile['first_name' ] = first
    profile['last_name' ] = last
    for key, value in user_info. items() :
        profile[key] = value
    return profile
user_profile = build_profile('cao' , 'fu' ,
location='hefei',field='finance',
character='better',ability='good',
appearance='shuai',iq='gao')
print(user_profile)


输出:
{'first_name': 'cao', 'last_name': 'fu', 'location': 'hefei', 'field': 'finance', 'character': 'better', 'ability': 'good', 'appearance': 'shuai',
'iq': 'gao'}

8-14

def car(manufacturers,size,**user_inf):
    '''总是接受制造商和型号, 还接受任意数量的关键字实参'''
    profile={}#profile 的空字典, 用于存储用户简介。
    profile['manu'] = manufacturers
    profile['si'] = size
    for key,value in user_inf.items():#我们遍历字典user_info 中的键—值对, 并将每个键—值对都加入到字典profile 中
        profile[key]=value
    return profile
user=car('baoma','yueye',
         nenghao='good',youhao='yiban',
         舒适度='好',宽敞度='大')
print (user)


输出:
{'manu': 'baoma', 'si': 'yueye', 'nenghao': 'good', 'youhao': 'yiban', '舒适度': '好', '宽敞度': '大'}

整个逻辑这样的先设置好 car(manufacturers,size,**user_inf):,定义的函数是下面的其实是profile{第一个为car中的manufactures,第二个为size,第三个就是在函数中的那个user_inf了)然后形参不是第一行就知道了么,最后再输入car中的数据,将其返还给profile,也就是定义的函数,那给了x值定义的函数就返还出来y值

 8-15 打印模型 : 将示例print_models.py中的函数放在另一个名为printing_functions.py的文件中; 在print_models.py的开头编写一条import 语句, 并修改这个文件以使用导
入的函数。
8-16 导入 : 选择一个你编写的且只包含一个函数的程序, 并将这个函数放在另一个文件中。 在主程序文件中, 使用下述各种方法导入这个函数, 再调用它:

import module_name
from module_name import function_name
from module_name import function_name as fn
import module_name as mn
from module_name import *

答:8-15

#printing_functions.py
def print_models(unprinted_designs, completed_models):
      """
      模拟打印每个设计,直到没有未打印的设计为止
      打印每个设计后,都将其移到列表completed_models中
      """
      while unprinted_designs:
          current_design = unprinted_designs.pop()

          # 模拟根据设计制作3D打印模型的过程
          print("Printing model: " + current_design)
          completed_models.append(current_design)

def show_completed_models(completed_models):
      """显示打印好的所有模型"""
      print("\nThe following models have been printed:")
      for completed_model in completed_models:
          print(completed_model)

----------------------------------------------
#print_models.py
from printing_functions import *

unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []

print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)

输出:

Printing model: dodecahedron
Printing model: robot pendant
Printing model: iphone case

The following models have been printed:
dodecahedron
robot pendant
iphone case

8-16

#displaying.py
def display_message():
      print('本章学习的函数')

----------------------------------------------
import displaying
displaying.display_message()

from displaying import display_message
display_message()

from displaying import display_message as dm
dm()

import displaying as dm
dm.display_message()

from displaying import *
display_message()
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这