• 沒有找到結果。

《Python 程序设计(微课版)》课后习题答案

N/A
N/A
Protected

Academic year: 2021

Share "《Python 程序设计(微课版)》课后习题答案"

Copied!
18
0
0

加載中.... (立即查看全文)

全文

(1)

《 Python 程序设计(微课版)》课后习题答案

单元 1 认识 Python

一、填空题

1. Python 是一种 面向对象的解释型 计算机程序设计语言。

2. Python 3.x 自带官方集成开发环境是___IDLE_____。

3. Python 程序源文件的扩展名是___.py______。

二、思考题

1.列举三个常用的Python 集成开发环境。

答:PyCharm、Eclipse(with PyDev)、Visual Studio Code 2.思考并理解 Python 语言的特性。

答:Python 是一种面向对象的解释型程序设计语言,语法简洁、可读性强。Python 提 供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容。用 Python

开发,许多功能不必从零编写,直接使用现成的即可。除了内置的库外,Python 还有大量

的第三方库,也就是别人开发的,供你直接使用的东西。Python 是跨平台的,它可以运行

在Windows、Mac 和各种 Linux/Unix 系统上。在 Windows 上写 Python 程序,放到 Linux 上也是能够运行的。

单元 2 变量和简单数据类型

一、填空题

1.布尔值是整型的子类,用数值 1 和 0 代表常量__True__和___False__。

2.表达式由 运算符 、 操作数 和圆括号组成。

二、如果a = 1、b = 2、c = 0,写出下列表达式的逻辑值:

1. a > b or a + b < c False

2. not ( a > b) True

3. a – b < c and not c True

三、编程题

1. 输入矩形的长与宽,计算矩形面积。

(2)

length = int(input("请输入矩形的长:")) width = int(input("请输入矩形的宽:")) area = length * width

print("矩形面积为:",area)

单元 3 流程控制

一、填空题

1.Python 中的流程控制语句有_顺序结构__、_分支结构_和_循环结构_。

2._continue_语句用于跳出本次循环,进入下一次循环。

二、写出下列程序的运行结果

1. 请使用字符串格式化的方式写一个新年问候语模板。

a = 0 if a:

print(“Hello”) else:

print(“World”)

结果:World

2. 将一串字符串中以.com 或.cn 为域名后缀的 URL 网址匹配出来,过滤掉其他无关信 息,如:<a href='www.baidu.com'> 百度 </a>。

i = sum = 0 while i <= 4:

sum += i i = i+1 print(sum)

结果:10 三、编程题

1. 编程输出九九乘法表。

(3)

1x1=1

1x2=2 2x2=4

1x3=3 2x3=6 3x3=9

1x4=4 2x4=8 3x4=12 4x4=16

1x5=5 2x5=10 3x5=15 4x5=20 5x5=25

1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36

1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49

1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64

1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

for i in range(1, 10):

for j in range(1, i+1):

print(str(i) + "x" + str(j) + "=" + str(i * j), end=" ") print()

单元 4 字符串与正则表达式

一、填空题

1.使用 _len()__函数可以查看字符串的长度。

2.字符串中从左往右的第一个字符索引为__0__。

3.表达式"helloworld"[-5:]的结果为__world__。

4.表达式"helloworld"[-5]的结果为__w__。

5.正则表达式模块 re 的__search()__方法用来在整个字符串中进行指定模式的匹配。

二、编程题

1.请使用字符串格式化的方式写一个新年问候语模板。

template="--*"*7+"\n\t 节 日 快 乐\t\n{0}:\n\t 祝您{1}快乐!\n\t\t\t{2}\n"+"--*"*7 print(template.format("李老师","春节","李梅"))

(4)

2.将一串字符串里面以.com 或.cn 为域名后缀的 URL 网址匹配出来,过滤掉其他无关 信息。如:<a href=’www.baidu.com’>百度</a>

import re

str1 = "<a href=’www.baidu.com’>百度</a>"

pattern = "(http://){0,1}[a-zA-Z0-9.]*(com|cn)"

result = re.search(pattern,str1) if result:

print(result.group()) else:

print("not matched")

单元 5 组合数据类型

一、简单题

1.能否直接修改字符串的某个字符?例如 s="abc",s[0]="1" 可以吗?

答:在Python 中,字符串是不可变类型,即无法直接修改字符串的某一位字符。

2. 元组和列表有什么不同?

答:list 是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。

列表中的项目。列表中的项目应该包括在方括号中,这样python 就知道你是在指明 5261

一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由 于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的元 祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号

分隔的项目定义。元组通常用在使语句或用户定义的函数能够1653 安全的采用一组值的时

候,即被使用的元组的值不会改变。

二、编程题

1. 设计一个字符串函数 reverse(s),返回字符串 s 的反串,例如 reverse("abc")返回

"cba"。

def reverse(s):

(5)

if len(s) <1:

return s

return reverse(s[1:])+s[0]

r = reverse(s) print(r)

2. 用一个字典描述一个日期,包含年(year)、月(month)、日(day)的键字。

today_time = datetime.datetime.now()

today_time_dict = {'year':today_time.year,'month':today_time.month,'day':today_time.day}

3. 写出下列程序执行的结果 Traceback (most recent call last):

File "C:/Users/Everdeen/Desktop/123.py", line 4, in <module>

for k3 in d2.keys():

NameError: name 'd2' is not defined

单元 6 Python 函数与模块

1.编程计算 1+2+4+…+100。

sum=0

for i in range (1,101):

sum=sum+i print (sum)

2. 从键盘输入一个字符串,直到按 Enter 键结束,编程统计字符串中的大小写英文字 母各有多少个。

# python 中输入字符串复,统计字符串中制大小写 2113 英文字母 5261 各有多少 4102 个?

class countNum(object):

def __init__(self):

s = input("input a string") self.s = s

(6)

def judge(self):

bigger = 0 smaller = 0 for i in self.s:

if i < 'A' or i > 'z':

continue elif 'A' < i < 'Z':

bigger += 1 elif 'a' < i < 'z':

smaller += 1 return bigger, smaller if __name__ == '__main__':

p = countNum() big, small = p.judge()

print("大写字母 1653%d 个" % big) print("小写字母%d 个" % small)

3. 小华今年 12 岁,她妈妈比她大 20 岁,编写程序计算多少年后她妈妈年龄比她大一 倍。

y=1

while y<150:

if 32+y==2*(12+y):

print(y) y+=1

4. 假设世界人口是 60 亿,如果每年按 1.5%的比例增长,编写程序计算经过多少年后 世界人口可以达到80 亿。

x = 60 year = 1 while 1:

x *= 1.015 if x >= 80:

(7)

print(x,year) break else:

year += 1

5. 一个小球从 80 米高空自由下落,每次落地后返回原高度的一半,再落下。编写程序

计算小球在第10 次落地时共经过多少米,以及第 10 次反弹有多高。

high = 80 n = 10

high_all = 0 #第 n 次落地时走过的长度 high_each = 0 #每次落地的高度内 def ball_lands(n):

global high_all, high_each, high

#小球第一次落地时 if n == 0:

high_each = high high_all += high_each

#print('1', high_each, high_all) return high_each

#从小球第 n 次落地往前容推 high_each = high * (1 / 2) ** n

print(u'第%d 次小球弹起的高度为:%.2f' %(n, high_each)) high_all += high_each * 2

#print('2', high_each, high_all) ball_lands(n - 1)

ball_lands(n)

print(u'小球落地%d 次,共经过%.2f 米。' % (n,high_all))

单元 7 Python 面向对象

(8)

1. 定义一个数学中的复数类 Complex,该类有一个构造函数和一个显示函数,建立一 个Complex 对象,调用设计的显示函数并显示。

class Complex:

def __init__(self, a):

self.a = a

def display(self):

print(self.a)

com = Complex("aaa") com.display()

2. 定义一个计算机类 MYComputer,该类包含 CPU 类型(String 类型)、RAM 内存 大小(Integer 类型)、HD 硬盘大小(Integer 类型),设计它的构造函数,再设计一个显

示函数,建立一个Complex 对象,调用设计的显示函数并显示。

class MyComputer:

def __init__(self, CPU, RAM, HD):

self.CPU = CPU self.RAM = RAM self.HD = HD

def show(self):

str1 = "cpu 是{},RAM 内存大小是{}G,HD 硬盘大小是{}G".format(self.CPU, self.RAM, self.HD)

print(str1)

cpu = "8 核 32 线程"

RAM = 8 HD = 500

mc = MyComputer(cpu, RAM, HD)

(9)

mc.show()

3. 设计一个整数类 MYInteger,该类有一个整数变量,并有一个 Value 属性,可以通 过Value 存取该变量的值,还有一个转二进制字符串的成员函数 toBin 和一个转十六进制字 符串的成员函数toHex。

class MyInteger:

def __init__(self, num):

self.num = num

def Value(self):

print(self.num)

def toBin(self):

print("转换为二进制为:", bin(self.num))

def toHex(self):

print("转换为十六进制为:", hex(self.num))

def tootc(self):

print("转换为八进制为:", oct(self.num))

num = 789

mi = MyInteger(num) mi.Value()

mi.toBin() mi.toHex() mi.tootc()

4. 建立一个普通人员类 Person,该类包含姓名(m_name)、性别(m_gender)、年 龄(m_age)成员变量。

(1)建立 Person 类,包含 m_name、m_sex、m_age 成员变量。

(10)

(2)建立 Person 的构造函数。

(3)建立一个显示函数 Show(),并显示该对象的数据。

(4)派生一个学生类 Student,增加班级(m_class)、专业(m_major),并设计这些 类的构造函数。

(5)建立 m_class、m_major 对应的属性函数 sClass()、sMajor()。

(6)建立显示成员函数 Show(),显示该学生对象的所有成员数据。

class Person:

def __init__(self, m_name, m_sex, m_age):

self.__m_name = m_name self.__m_sex = m_sex self.__m_age = m_age

def Show(self):

print(self.__m_name, self.__m_sex, self.__m_age,end=" ")

class Student(Person):

def __init__(self, m_name, m_sex, m_age, m_class, m_major):

# Person.__init__(self, m_name, m_sex, m_age) # 普通方法调用

super(Student,self).__init__(m_name, m_sex, m_age) # 使用 super 方法调用父类

——__init__

self.__m_class, self.__m_major = m_class, m_major

def sClass(self):

print(self.__m_class)

def sMajor(self):

print(self.__m_major)

def Show(self):

# Person.Show(self) # 普通方法调用

(11)

super(Student, self).Show() # 使用 super 方法调用父类 —— Show 方法 print(self.__m_class, self.__m_major)

stu = Student("张三", "男", "18", "高三", "理科") stu.Show()

5. 建立一个时间类 Time,该类包含时(hour)、分(minute)、秒(second)的实例 属性。

(1)设计时间显示函数 show(self)。

(2)设计一个时间大小比较函数 compare(self,t),其中 t 是另外一个时间变量。

class Time:

def __init__(self,hour, minute, second):

self.hour = hour self.minute = minute self.second = second

def show(self):

format_time = "{}:{}:{}".format(self.hour,self.minute,self.second) print(format_time)

def compare(self):

t = "23:45:07"

t_time = t.split(":") t_hour = t_time[0]

t_minute = t_time[1]

t_second = t_time[2]

t_seconds = int(t_hour) * 3600 + int(t_minute) * 60 + int(t_second)

compare_sec = abs(t_seconds - (self.hour*3600 + self.minute*60 +self.second)) compare_hour = compare_sec//3600

compare_minute = (compare_sec%3600)//60

(12)

compare_second = (compare_sec%3600)%60

print("{}:{}:{}".format(compare_hour,compare_minute,compare_second))

time = Time(12, 30, 1) time.show()

time.compare()

单元 8 异常与异常处理

一、单选题

1.下列程序运行以后,会产生如下( B )异常。

def test:

print(123)

A. SyntaxError B. NameError C. IndexError D.KeyError 2.下列选项中,( C )是唯一不在运行时发生的异常。

A. ZeroDivisionError B.NameError C.SyntaxError D.KeyError 3.当 try 语句中没有任何错误信息时,一定不会执行( D )语句。

A. try B. else C.finally D. except

4.在完整的异常语句中,语句出现的顺序正确的是( A )。

A. try---->except--->else---->finally B. try---->else---->except--->finally C. try---->except--->finally--->else D.try--->else---->else--->except 5.下列选项中,用于触发异常的是( C )。

A. try B.catch C.raise D. except 二、填空题

1.Python 中自定义异常时,用于主动抛出异常的关键字是___ raise __。

2.一个 try 语句对应一个__ except ___子句。

3. 当使用序列中不存在 索引 时,会引发IndexError 异常。

4. Python 中所有的异常类都是___ BaseException ___子类。

三、简答题

1. 请简述什么是异常。

程序在运行时,如果python 解释器遇到一个错误,会停止程序的执行,并且提示一些

错误信息,这就是异常。异常是一个事件,该事件会在程序执行过程中发生,影响程序的 正常执行,一般情况下,在python 中无法处理程序时就会发生异常,异常是 Python 的一个

(13)

对象,表示一个错误,当Python 脚本发生异常时,我们需要捕获并处理异常,否则程序就 会终止执行。

2. 常见的异常类型有哪些?

NameError 未声明/初始化对象 (没有属性) ZeroDivisionErro 除(或取模)零 (所有数据类型) SyntaxError 语法错误

IndexError 序列中没有没有此索引(index) KeyError 映射中没有此键

IOError 输入/输出操作失败

AttributeError 未知的对象属性 ValueError 传入无效的参数

四、编程题

编写一个计算减法的方法,当被减数小于减数时,抛出“被减数不能小于减数"的异常。

def jianfa(a, b): # 定义一个函数 try: # 尝试

if a < b: # 如果 a 小于 b

raise BaseException('被减数{}不能小于减数{}'.format(b,a)) else: #否则

print(a - b) # 输出 a-b except BaseException as f : #

print(f) # 触发,抛出异常 jianfa(4,5) # 第一个数 4,第二个数是 5

单元 9 Python 文件操作

一、单选题

1.打开一个已有文件,然后在文件末尾添加信息,正确的打开方式为( C )。

A. 'r' B. 'w' C.'a' D. 'w+'

(14)

2.假设文件不存在,如果使用 open 方法打开文件会报错,那么该文件的打开方式是下

列哪种模式?( A )

A.'r' B. 'w' C.'a' D. 'w+'

3.假设 file 是文本文件对象,下列选项中,哪个用于读取一行内容?( C ) A. file.read() B. file.read(200)

C. file.readline() D. file.readlines() 4.下列方法中,用于向文件中写出内容的是( B )。

A.open B.write C.close D.read 5.下列方法中,用于获取当前目录的是( C )。

A.open B.write C.getcwd D.read 二、填空题

1. 打开文件对文件进行读写,操作完成后应该调用___ close___方法关闭文件,以释放 资源。

2.使用 readlines 方法把整个文件中的内容进行一次性读取,返回的是一个 列表 。 3.os 模块中的 mkdir 方法用于创建___目录__。

三、简答题

1. 二进制文件与文本文件有什么区别?

(1)存储数据类型不同

文本文件只能存储char 型字符变量。二进制文件可以存储 char/int/short/long/float/等 各种变量值。

(2)数据长度不同

文本文件每条数据通常是固定长度的。以ASCII 为例,每条数据(每个字符)都是 1

个字节。进制文件每条数据不固定。如short 占两个字节,int 占四个字节,float 占 8 个字 节。

(3)读取的软件不同

文本文件编辑器就可以读写,比如记事本、NotePad++、Vim 等。二进制文件需要特 别的解码器,比如bmp 文件需要图像查看器,rmvb 需要播放器。

2. 解释一下以下三个参数的分别作用 open(f_name,'r',encoding="utf-8") f_name 文件名

r 模式

encoding 编码方式

(15)

四、编程题

现有一个文本文件,文件内容全为英文,编写程序读取其内容,并将其中的大写字母 变为小写字母,小写字母变为大写字母。

with open("D:\\english.txt", 'r+') as f:

s = f.read()

ss = [i.swapcase() for i in s]

f.seek(0) f.writelines(ss) print(s)

单元 10 项目综合实训

一、编程题

电影《无双》上映后,发行商和导演为了了解用户对电影的反馈,现需要爬取猫眼平

台 的 电 影 影 评 数 据 。 数 据 爬 取 URL 地 址 为

“http://m.maoyan.com/mmdb/comments/movie/342166.json?

_v_=yes&offset=0”,筛选出从影片上映日期到当前时间的影评数据,将其保存在

“d:\\comments.csv”文件中,最终部分数据展示效果如下图所示。

import requests import json import time import random import csv

from datetime import datetime, timedelta

def get_headers():

user_agent_list = [

(16)

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",

"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"

]

user_agent = random.choice(user_agent_list) headers = {'User-Agent': user_agent}

return headers

(17)

def get_data(url):

headers = get_headers() try:

with requests.Session() as s:

response = s.get(url, headers=headers, timeout=3) content = response.text

return content except Exception as e:

print(e)

# 处理数据

def parse_data(html):

try:

data = json.loads(html)['cmts'] # 将 str 转换为 json except Exception as e:

return None comments = []

for item in data:

comment = [item['id'], item['nickName'], item["userLevel"], item['cityName'] if 'cityName' in item else '',

item['content'].replace('\n', ' '), item['score'], item['startTime']]

comments.append(comment) return comments

# 存储数据 def save_to_csv():

start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 获取当前时间,

从当前时间向前获取

end_time = '2019-08-12 00:00:00' # 影片的上映日期

while start_time > end_time: # 如果时间开始时间大于结束时间

(18)

url = 'http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=0&startTime=' + start_time.replace(

' ', '%20') html = None try:

html = get_data(url) except Exception as e:

time.sleep(0.5) html = get_data(url) else:

time.sleep(1)

comments = parse_data(html) if comments:

start_time = comments[14][-1] # 获得末尾评论的时间

start_time = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S') +

timedelta( seconds=-1) # 转换为 datetime 类型,减 1 秒,避免获取到重复数据 start_time = datetime.strftime(start_time,'%Y-%m-%d %H:%M:%S') # 转换为 str

print(comments)

with open("d:\\comments.csv", "a", encoding='utf-8', newline='') as csvfile:

writer = csv.writer(csvfile) writer.writerows(comments) if __name__ == '__main__':

save_to_csv()

參考文獻

相關文件

把作法用乘法算式記下來,並把算式中

一、高斯消去法:將方程組的某一列乘以定數加到另一列的方法,稱為高斯消去法

在軟體的使用方面,使用 Simulink 來進行。Simulink 是一種分析與模擬動態

解決方案:取出圖表說明並開啟原始的 PDF 檔供使用者瀏覽 利用資料庫語法來可得知圖表所在的位置,因此可使用 adobe acrobat 函式庫中的

中国新歌剧: 歌剧原是欧洲近代一种综合性的大型艺术体裁,对于欧洲各国音乐文化  生活影响重大。“五四”以来,它随西方音乐文化传入中国,许多的中国音乐家开始在 

一般说来, 对于一个区间上单调的函数的 图形都存在一个需要判别弧段位于相应的弦线

业技术”模块是在“技术与设计 1” “技术与设计 2”必修模块学完之后的一 个选修模块,它包括“绿色食品” “种质资源的保护和引进” “无土栽培” “营 养与饲料”

通用技术 选修 4 现代农业技术 专题三 无土栽培 Modern Agricultural Technology Topic 3 Soilless Culture.