Python编程:从入门到实践(第3版)练习题答案 第 10 章 文件和异常

Python编程:从入门到实践(第3版)练习题答案

第 10 章 文件和异常

练习 10.1:Python 学习笔记 在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的 Python 知识,其中每一行都以“In Python you can”打头。将这个文件命名为learning_python.txt,并存储到为完成本章练习而编写的程序所在的目录中。编写一个程序,读取这个文件,并将你所写的内容打印两次:第一次打印时读取整个文件;第二次打印时先将所有行都存储在一个列表中,再遍历列表中的各行。

第一步:learning_python.txt文件内容

In Python you can easily create and manipulate strings.

In Python you can iterate over lists, tuples, and dictionaries using loops.

In Python you can define and use functions to modularize your code.

第二步:读取打印

from pathlib import Path
path=Path('learning_python.txt')
contents=path.read_text()
print("打印第一遍:\n"+contents)
print("\n打印第二遍:")
lines=contents.splitlines()
for line in lines:
    print(line)

练习 10.2:C 语言学习笔记 可使用 replace() 方法将字符串中的特定单词替换为另一个单词。下面是一个简单的示例,演示了如何将句⼦中的 ‘dog’ 替换为 ‘cat’:

>>> message = “I really like dogs.”

>>> message.replace(‘dog’, ‘cat’)

‘I really like cats.’

读取你刚创建的文件 learning_python.txt 中的每一行,将其中的 Python都替换为另一门语言的名称,如 C。将修改后的各行都打印到屏幕上。

第一步:learning_python.txt文件内容

In Python you can easily create and manipulate strings.

In Python you can iterate over lists, tuples, and dictionaries using loops.

In Python you can define and use functions to modularize your code.

第二步:读取打印

from pathlib import Path
path=Path('learning_python.txt')
contents=path.read_text()
print("打印替换前的信息:\n"+contents)
contents=contents.replace('Python', 'C')
print("\n打印替换后的信息:\n"+contents)

练习 10.3:简化代码 本节前面的程序 file_reader.py 中使用了一个临时变量 lines,来说明 splitlines() 的工作原理。可省略这个临时变量,直接遍历 splitlines() 返回的列表:

for line in contents.splitlines():

对于本节的每个程序,都删除其中的临时变量,让代码更简洁。

from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text()
for line in contents.splitlines():
print(line)
from pathlib import Path
path = Path('pi_digits.txt')
contents = path.read_text()
pi_string = ''
for line in contents.splitlines():
    pi_string += line
print(pi_string)
print(len(pi_string))

练习 10.4:访客 编写一个程序,提示用户输入其名字。在用户做出响应后,将其名字写入文件 guest.txt。

from pathlib import Path
name = input("请输入您的姓名:")
path = Path("guest.txt")
path.write_text(name)
print(f"已成功写入 {name} 到文件 guest.txt")

练习 10.5:访客簿 编写一个 while 循环,提示用户输入其名字。收集用户输入的所有名字,将其写入 guest_book.txt,并确保这个文件中的每条记录都独占一行。

from pathlib import Path
name = ""
while True:
    name1 = input("请输入您的姓名:")
    if name1 == 'q':
        break
    name += f"{name1}\n"
path = Path("guest.txt")
path.write_text(name)

练习 10.6:加法运算 在提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数。在这种情况下,当你尝试将输入转换为整数时,将引发ValueError 异常。编写一个程序,提示用户输入两个数,再将它们相加并打印结果。在用户输入的任意一个值不是数时都捕获 ValueError 异常,并打印一条友好的错误消息。对你编写的程序进行测试:先输入两个数,再输入一些文本而不是数。

try:
    num1 = int(input("请输入第一个数:"))
    num2 = int(input("请输入第二个数:"))
    result = num1 + num2
    print("两个数的和为:", result)
except ValueError:
    print("输入无效!请确保输入的是整数。")

练习 10.7:加法计算器 将为练习 10.6 编写的代码放在一个 while 循环中,让用户在犯错(输入的是文本而不是数)后能够继续输入数。

while True:
    try:
        num1 = int(input("请输入第一个数:"))
        num2 = int(input("请输入第二个数:"))
        result = num1 + num2
        print("两个数的和为:", result)
        break
    except ValueError:
        print("输入无效!请确保输入的是整数。")

练习 10.8:猫和狗 创建文件 cats.txt 和 dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。将这些代码放在一个 try-except 代码块中,以便在文件不存在时捕获FileNotFoundError 异常,并显示一条友好的消息。将任意一个文件移到另一个地方,并确认 except 代码块中的代码将正确地执行。

try:
    # 尝试读取 cats.txt 文件
    contents_cats=path_cats.read_text(encoding='utf-8')
    print(contents_cats)
    # 尝试读取 dogs.txt 文件
    contents_dogs=path_dogs.read_text(encoding='utf-8')
    print(contents_dogs)
except FileNotFoundError:
    print("文件不存在!")

删除“dogs.txt”文件

练习 10.9:静默的猫和狗 修改你在练习 10.8 中编写的 except 代码块,让程序在文件不存在时静默失败。

from pathlib import Path
path_cats = Path('cats.txt')
path_dogs=Path('dogs.txt')
try:
    # 尝试读取 cats.txt 文件
    contents_cats=path_cats.read_text(encoding='utf-8')
    print(contents_cats)
    # 尝试读取 dogs.txt 文件
    contents_dogs=path_dogs.read_text(encoding='utf-8')
    print(contents_dogs)
except FileNotFoundError:
    pass

练习 10.10:常见单词 访问古登堡计划,找一些你想分析的图书。下载这些作品的文本文件或将浏览器中的原始文本复制到文本文件中。可以使用方法 count() 来确定特定的单词或短语在字符串中出现了多少次。例如,下面的代码计算 ‘row’ 在一个字符串中出现了多少次:

>>> line = “Row, row, row your boat”

>>> line.count(‘row’)

2

>>> line.lower().count(‘row’)

3

请注意,通过使用 lower() 将字符串转换为全小写的,可捕捉要查找的单词的各种格式,而不管其大小写如何。

编写一个程序,读取你在古登堡计划中获取的文件,并计算单词’the’ 在每个文件中分别出现了多少次。这里计算得到的结果并不准确,因为诸如 ‘then’ 和 ‘there’ 等单词也被计算在内了。请尝试计算 'the '(包含空格)出现的次数,看看结果相差多少。

from pathlib import Path
def count_word(filename, word):
    file = Path(filename)
    text = file.read_text(encoding='utf-8')
    count = text.lower().count(word)
    return count
filenames = ['A wilful Ward.txt', 'The True Story of My Life.txt', 'The Life of George Borrow.txt']  # 将文件名替换为你实际下载的文件名
word = 'the'
for filename in filenames:
    word_count = count_word(filename, word)
    word_with_space_count = count_word(filename, word + ' ')
    print(f"In the file {filename}, the word '{word}' appears {word_count} times")
    print(f"In the file {filename}, the word '{word + ' '}' appears {word_with_space_count} times")
    print()

练习 10.11:喜欢的数 编写一个程序,提示用户输入自己喜欢的数,并使用 json.dumps() 将这个数存储在文件中。再编写一个程序,从文件中读取这个值,并打印如下消息。

程序代码:

I know your favorite number! It’s _____.

from pathlib import Path
import json
numbers = input("请输入您喜欢的数:")
path = Path('numbers.json')
contents = json.dumps(numbers)
path.write_text(contents)

from pathlib import Path
import json
path = Path('numbers.json')
contents = path.read_text()
numbers = json.loads(contents)
print(f"I know your favorite number! It's {numbers}.")

练习 10.12:记住喜欢的数 将你在完成练习 10.11 时编写的两个程序合而为一。如果存储了用户喜欢的数,就向用户显示它,否则提示用户输入自己喜欢的数并将其存储在文件中。运行这个程序两次,看看它是否像预期的那样工作。

from pathlib import Path
import json
favorite_number_file = Path('favorite_number.json')
def save_favorite_number():
    favorite_number = input("请输入您喜欢的数:")
    path = Path('favorite_number.json')
    contents = json.dumps(favorite_number)
    path.write_text(contents)
try:
    contents = favorite_number_file.read_text()
    favorite_number=json.loads(contents)
    print(f"I know your favorite number! It's {favorite_number}.")
except FileNotFoundError:
    save_favorite_number()

练习 10.13:用户字典 示例 remember_me.py 只存储了一项信息——用户名。请扩展该示例,让用户同时提供另外两项信息,再将收集到的所有信息存储到一个字典中。使用 json.dumps() 将这个字典写入文件,并使用 json.loads() 从文件中读取它。打印一条摘要消息,指出程序记住了有关用户的哪些信息。

import json
from pathlib import Path
def get_user_info():
    name = input("请输入您的用户名:")
    info1 = input("请输入信息1:")
    info2 = input("请输入信息2:")
    user_info = {
        'name': name,
        'info1': info1,
        'info2': info2
    }
    return user_info
def save_user_info(user_info):
    path = Path('user_info.json')
    contents = json.dumps(user_info)
    path.write_text(contents)
def load_user_info():
    path = Path('user_info.json')
    contents = path.read_text()
    user_info = json.loads(contents)
    return user_info
def print_summary(user_info):
    print(f"程序记住了以下关于用户的信息:")
    for key, value in user_info.items():
        print(f"{key}: {value}")
try:
    user_info = load_user_info()
    print_summary(user_info)
except FileNotFoundError:
    user_info = get_user_info()
    save_user_info(user_info)

练习 10.14:验证用户 最后一个 remember_me.py 版本假设用户要么已输入其用户名,要么是首次运行该程序。我们应修改这个程序,以防当前用户并非上次运行该程序的用户。

为此,在 greet_user() 中打印欢迎用户回来的消息之前,询问他用户名是否是对的。如果不对,就调用 get_new_username() 让用户输入正确的用户名。

import json
from pathlib import Path
def get_user_info():
    name = input("请输入您的用户名:")
    info1 = input("请输入信息1:")
    info2 = input("请输入信息2:")
    user_info = {
        'name': name,
        'info1': info1,
        'info2': info2
    }
    return user_info
def save_user_info(user_info):
    path = Path('user_info.json')
    contents = json.dumps(user_info)
    path.write_text(contents)
def load_user_info():
    path = Path('user_info.json')
    contents = path.read_text()
    user_info = json.loads(contents)
    return user_info
def print_summary(user_info):
    print(f"程序记住了以下关于用户的信息:")
    for key, value in user_info.items():
        print(f"{key}: {value}")
def get_new_username():
    name = input("请输入您的用户名:")
    info1 = input("请输入信息1:")
    info2 = input("请输入信息2:")
    user_info = {
        'name': name,
        'info1': info1,
        'info2': info2
    }
    return user_info
def greet_user(user_info):
    username = user_info['name']
    print(f"欢迎回来,{username}!")
    is_correct = input("您是上次运行程序的用户吗? (是/否) ")
    if is_correct.lower() != '是':
        user_info = get_new_username()
        save_user_info(user_info)
    print_summary(user_info)
try:
    user_info = load_user_info()
    greet_user(user_info)
except FileNotFoundError:
    user_info = get_user_info()
    save_user_info(user_info)
    greet_user(user_info)

以上就是“Python编程:从入门到实践(第3版)练习题答案 第 10 章 文件和异常”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值