高级编程技术_课后作业(八)

说明

下面为课本上第八章动手试一试中的部分习题

8-1

题目:
消息 :编写一个名为display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。


code:
def display_message():
    print("I am learing how to define functions in Python")

display_message()

result:



8-2

题目:
喜欢的图书 :编写一个名为favorite_book() 的函数,其中包含一个名为title 的形参。这个函数打印一条消息,如One of my favorite books is Alice in Wonderland 。调用这个函数,并将一本图书的名称作为实参传递给它。

code:
def favorite_book(title):
    print("One of my favorite books is " + title)

favorite_book("Alice in Wonderland")

result:


8-3

题目:
T恤 :编写一个名为make_shirt() 的函数,它接受一个尺码以及要印到T恤上的字样。这个函数应打印一个句子,概要地说明T恤的尺码和字样。使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。

code:
def make_shirt(size, words):
    print("The T-shirt's size is " + size + ", and the words on it are " + words)

make_shirt("L", "hhh")
make_shirt(words = "hhh", size = "L")

result:


8-4

题目:
大号T恤 :修改函数make_shirt() ,使其在默认情况下制作一件印有字样“I love Python”的大号T恤。调用这个函数来制作如下T恤:一件印有默认字样的大号T恤、一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要)。

code:
def make_shirt(size = "L", words = "I love Python"):
    print("The T-shirt's size is " + size + ", and the words on it are " + words)

make_shirt("L")
make_shirt("M")
make_shirt(words = "I love C++")

result:


8-7

题目:
专辑 :编写一个名为make_album() 的函数,它创建一个描述音乐专辑的字典。这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参,以便能够存储专辑包含的歌曲数。如果调用这个函数时指定了歌曲数就将这个值添加到表示专辑的字典中。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。

code:
def make_album(name, album, number=''):
    music = {'singer':name, 'album':album}
    if number:
        music['number'] = number
    return music

print(make_album('Jay', 'Jay'))
print(make_album("IU", "chat_shire", '2'))
print(make_album('IU', 'Platte'))

result:

8-8

题目:
用户的专辑 :在为完成练习8-7编写的程序中,编写一个while 循环,让用户输入一个专辑的歌手和名称。获取这些信息后,使用它们来调用函数make_album() ,并将创建的字典打印出来。在这个while 循环中,务必要提供退出途径。

code:
def make_album(name, album, number=''):
    music = {'singer':name, 'album':album}
    if number:
        music['number'] = number
    return music

print("Enter q to quit anytime")
while True:
    singer = input("Enter the name of singer\n")
    if singer == 'q':
        break;
    album = input("Enter one of " + singer + "'s album\n")
    if singer == 'q':
        break;
    print(make_album(singer, album))

result:


8-10

题目:
了不起的魔术师 :在你为完成练习8-9而编写的程序中,编写一个名为make_great() 的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样“the Great”。调用函数show_magicians() ,确认魔术师列表确实变了。

code:
def make_great(magicians):
    for i in range(len(magicians)):
        magicians[i] = "the Great " + magicians[i]

def show_magicians(magicians):
    for magician in magicians:
        print(magician)

magicians = ['zero', 'Jay', 'hhh']
print("The magicians are:")
show_magicians(magicians)
make_great(magicians)
print("Now they are:")
show_magicians(magicians)

result:


8-11

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

code:

def make_great(magicians):
    for i in range(len(magicians)):
        magicians[i] = "the Great " + magicians[i]
    return magicians

def show_magicians(magicians):
    for magician in magicians:
        print(magician)

magicians = ['zero', 'Jay', 'hhh']
print("The magicians are:")
show_magicians(magicians)
great_magicians = make_great(magicians[:])
print("The magicians are:")
show_magicians(magicians)
print("The great magicians are:")
show_magicians(great_magicians)

result:


8-12

题目:
三明治 :编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客
点的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。

code:
def sandwitch(*ingredients):
    print("Ingredients:")
    for ingredient in ingredients:
        print(ingredient)

sandwitch('a', 'b', 'c', 'd')
sandwitch('asd', 'adf', 'afd')
sandwitch('banana', 'apple', 'strawberry')
result:

8-14

题目:
汽车:编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可少的信息,以及两个名称—值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:


code:
def make_car(brand, model, **features):
    car = {}
    car['brand'] = brand
    car['model'] = model
    for key, value in features.items():
        car[key] = value
    return car

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


8-15

题目:
打印模型 :将示例print_models.py中的函数放在另一个名为printing_functions.py的文件中;在print_models.py的开头编写一条import 语句,并修改这个文件以使用导入的函数。

code:


result:
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 现代编译原理C语言描述修订版的课后作业是让学生进一步理解和应用编译原理的知识和技术。这份作业涉及的内容包括词法分析、语法分析、语义分析、间代码生成、优化和代码生成等方面。 在词法分析方面,学生可能需要根据给定的语法规则和词法规则,设计并实现一个词法分析器。该分析器会将输入的源代码分解成一系列单词,并识别出每个单词对应的词法单元。 在语法分析方面,作业可能要求学生使用自顶向下的递归下降分析方法,根据给定的语法规则和词法单元序列,构建一个语法树或抽象语法树。 在语义分析方面,学生可能需要为语法树或抽象语法树添加类型检查和作用域判断等语义信息,并检查源代码的语义错误。 在间代码生成方面,作业可能要求学生将语法树或抽象语法树转换为间代码。间代码可以是三地址代码、四地址代码等形式。 在优化方面,学生可能需要分析间代码,并对其进行优化,以提高程序的执行效率或减小生成的目标代码的大小。 最后,在代码生成方面,学生可能需要将间代码转换为目标代码,具体的目标代码形式取决于所使用的目标机器和编译器。 为了完成这些作业,学生可能需要参考相关的教材、编译器相关工具和库的文档,以及阅读编译原理相关的论文和文献。同时,动手实践和编写代码是至关重要的,通过实际操作和调试,可以更好地理解和掌握编译原理的概念和技术。 ### 回答2: 现代编译原理c语言描述修订版课后作业主要是对课堂所学知识的巩固和实践。通过完成这些作业,我们可以深入理解编译原理的核心概念和原理,并且通过实际操作来锻炼我们在C语言编程方面的能力。 作业内容包括但不限于以下几个方面: 1. 词法分析器的实现:根据给定的文法和词法规则,实现一个C语言的词法分析器,能够对C程序进行词法分析,将源代码分解成一系列的标记(tokens)。 2. 语法分析器的实现:根据给定的文法和语法规则,实现一个C语言的语法分析器,能够对C程序进行语法分析,构建语法树,并检查语法错误。 3. 语义分析器的实现:根据给定的语义规则,实现一个C语言的语义分析器,能够对C程序进行语义分析,检查和处理类型错误,生成间代码。 4. 间代码生成:根据给定的间代码规范,实现一个C语言的间代码生成器,能够将语法树转化为等价的间代码表示。 5. 优化和目标代码生成:实现一系列优化算法和技术,对生成的间代码进行优化,并将优化后的间代码转化为目标代码。 通过完成这些作业,我们可以逐步掌握编译原理的重要组成部分,并且了解它们之间的关系和作用。这不仅可以提升我们的编译技术,还可以帮助我们更好地理解和应用C语言。 总之,现代编译原理C语言描述修订版课后作业对于我们深入学习和掌握编译原理,提升编译技术和C语言编程能力具有重要意义。通过不断实践和巩固,我们可以在编译原理领域取得更好的成绩,为今后的编程生涯打下坚实的基础。 ### 回答3: 现代编译原理C语言描述修订版的课后作业是对课堂所学知识的巩固和运用。通过这些作业,学生可以进一步理解和掌握编译原理的各种概念和技术。 首先,作业可能包括一些理论题目,要求学生对编译原理的相关概念进行阐述和解释。例如,关于词法分析器的作用和实现原理的问题,学生需要详细解释词法分析器的作用和工作原理,并举例说明。 其次,作业还可能要求学生完成一些编程题目,例如设计一个简单的语法分析器。学生需要使用C语言描述相关的语法规则,并实现相应的语法分析算法。通过这样的编程练习,学生可以更好地理解语法分析器的原理和实现方法。 此外,作业还可能包括一些应用题目,例如优化编译器的设计。学生需要思考如何通过优化编译器的设计和算法来提高代码的执行效率。他们可以考虑使用更高级的优化技术,如循环展开、向量化等。 通过完成这些作业,学生能够加深对编译原理的理解,并提高自己解决实际问题的能力。这些作业可以帮助学生巩固和运用在课堂上学到的知识,同时也能够培养学生的编程能力和解决问题的思维能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值