python编程从入门到实践(第二版)第十章 课后练习题

"""练习10-1  Python学习笔记
1.在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python知识,
其中每一行都以In Python you can打头将这个文件命名为learning_python.txt并将其存储到为完成本章练习而编写的程序所在的目录中
2.编写一个程序,它读取这个文件,并将你所写的内容打印三次:
第一次打印时读取整个文件;
3.第二次打印时遍历文件对象;
4.第三次打印时将各行存储在一个列表中,再在with代码块外打印它们。"""

# 1.文本编辑器中新建一个名为:learning_python文件
filename = 'learning_python.txt'

# 2.编写一个程序,它读取这个文件
print("--- 正在读取整个文件:")
with open(filename) as f:  # 打开文件取个f的别名
    contents = f.read()  # 把读取的文件赋值给变量
print(contents) # 打印

# 3.逐行读取
print("\n--- 正在逐行读取个文件:")
with open(filename) as f:  # 打开文件取个f的别名
    for line in f:  # 变量文件
        print(line.rstrip())  # 打印逐行时删除尾部换行符

# 4.
print("\n--- 将行存储在列表中再打印:")
with open(filename) as f:  # 打开文件取个f的别名
    lines = f.readlines()  # 把读取的每行文件赋值给变量

for line in lines:  # 代码块外打印
    print(line.rstrip())
"""练习10-2  C语言学习笔记
你可使用方法replace()将字符串中的特定单词都替换为另一个单词。
下面是一个简单的示例,演示了如何将句子中的'dog'替换为'cat':"""

# 把文本文件赋值给变量
filename = 'learning_python.txt'

# 打开文件起个别名逐行读取
with open(filename) as f:
    lines = f.readlines()  # 读取出来后赋值给列表

# 遍历文件列表
for line in lines:  
    line = line.rstrip()  # 删除末尾的换行符
    print(line.replace('Python', 'C'))  # 再将文件中Python替换为C
"""练习10-3访客
编写一个程序,提示用户输入其名字;用户做出响应后,将其名字写入到文件guest.txt中。"""

# 提示用户输入其名字
name = input("输入你的名字: ")

# 创建名为guest.txt的文本文件并赋值给变量
filename = 'guest.txt'

# 以写入的方式打开文件给文件起给别名
with open(filename, 'w') as f:
    f.write(name)  # 把你的名字储存到文本文件

# 你的文件夹会自动生成一个名为guest.txt的文本文件
"""练习10-4  访客名单
编写一个while循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,
并将一条到访记录添加到文件guest_book.txt中。
确保这个文件中的每条记录都独占一行。"""

# 新建一个名为guest_book.txt的文本文件
filename = 'guest_book.txt'

print("完成后输入“quit”退出.")
while True:  # 循环
    name = input("\n输入你的名字: ")  # 提示用户输入其名字
    if name == 'quit':  # 如果名字是quit
        break  # 就停止
    else:  # 反之
        with open(filename, 'a') as f:  # 以追加的形式打开文件
            f.write(name + "\n")  # 把名字添加到文件guest_book.txt中
        print("゙嗨 " + name + "您已被添加到宾客登记簿.")  # 打印
"""10-5  关于编程的调查
编写一个while循环,询问用户为何喜欢编程。
每当用户输入一个原因后,都将其添加到一个存储所有原因的文件中。。"""

# 新建一个名为programming_poll.txt的文本文件
filename = 'programming_poll.txt'

responses = []  # 存储所有原因列表

# 循环询问用户
while True:  
    response = input("\n你为什么喜欢编程: ") # 提示用户输入 
    responses.append(response)  # 添加到列表
    # 控制结束循环
    continue_poll = input("y继续询问n结束询问? (y/n) ")
    if continue_poll != 'y':  # 如果输入y就结束循环
        break
        
# 把询问结果存储到文件
with open(filename, 'a') as f:  # 以追加的形式打开文件
    for response in responses:  # 遍历列表
        f.write(response + "\n")   # 把询问结果添加到文件programming_poll.txt中       
"""练习10-6  加法运算
提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。
在这种情况下,当你尝试将输入转换为整数时,将引发TypeError异常。
编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。
在用户输入的任何一个值不是数字时都捕获TypeError异常,并打印一条友好的错误消息。
对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。"""

try:  # 如果用户出错
    # 用户输入的是字符要转换成整数才能运算
    x = int(input("请输入一个整数: "))  
    y = int(input("请再输入一个整数: "))

except ValueError:  # 就打印提示语
    print("对不起只能输入整数.")

else:
    sum = x + y  # 变量接收计算结果
    print(str(x) + " + " + str(y) + " = " + str(sum))  # 打印计算结果(整数转换成字符才能打印)
"""练习10-7  加法计算器
将你为完成练习10-6而编写的代码放在一个while循环中,
让用户犯错(输入的是文本而不是数)后能够继续输入数。"""

while True:
    try:  # 如果用户出错
        # 用户输入的是字符要转换成整数才能运算
        x = int(input("请输入一个整数: ")) 
        y = int(input("请再输入一个整数: "))

    except ValueError:  # 就打印提示语
        print("对不起只能输入整数.")

    else:
        sum = x + y  # 变量接收计算结果
        print(str(x) + " + " + str(y) + " = " + str(sum))  # 打印计算结果(整数转换成字符才能打印)

    # 退出循环的条件
    x = input("退出请输入n: ")  # 输入n退出
    if x == 'n':  # 如果输入n
        break  # 停止循环
"""练习10-8  猫和狗
1.创建两个文件——cats.txt和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。
2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
3.将这些代码放在一个try-except代码块中,以便在文件不存在时捕获FileNotFound错误,并打印一条友好的消息。
4.将文件之一移到另一个地方,并确认except代码块中的代码将正确地执行。"""

# 1.创建两个文本文件——cats.txt和dogs.txt并赋值给变量
filenames = ['cats.txt', 'dogs.txt']

# 2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
for filename in filenames:
    print("\n正在读取文件: " + filename)
    # 3.将这些代码放在一个try-except代码块中,
    try:
        with open(filename) as f:
            contents = f.read()
            print(contents)
    except FileNotFoundError:
        print("  对不起找不到cats文件.")

# 4.删除cats文件后执行代码
"""练习10-9  沉默的猫和狗
修改你在练习10-8中编写的except代码块,让程序在文件不存在时一言不发。"""

# 1.创建两个文本文件——cats.txt和dogs.txt并赋值给变量
filenames = ['cats.txt', 'dogs.txt']

# 2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
for filename in filenames:

    # 3.将这些代码放在一个try-except代码块中,
    try:  # 判断是否出错
        with open(filename) as f:  # 打开文件
            contents = f.read()  # 赋值给变量
            
    except FileNotFoundError:  # 出错了让程序在文件不存在时一言不发
        pass  # 停止
    else:  # 反之读取没有出错的文件
        print("\n正在读取文件: " + filename)   
        print(contents)  # 打印没有出错的文件
        
# 4.删除cats文件后执行代码
"""练习10-11  喜欢的数
1.编写一个程序,提示用户输入他喜欢的数,并使用json.dump()将这个数存储到文件中。
2.再编写一个程序,从文件中读取这个值,并打印消息“I know your favorite number! It’s _____."""

# 1
import json  # 导入json模块存储数据

number = input("你最喜欢的数是: ")  # 提示用户
with open('num.txt', 'w') as f:  # 写入方式打开文件(会自动新建一个)起个别名f
    json.dump(number, f)  # 调用json模块里dump函数存储到文件
    print("我会记住你最喜欢的数")

# 2.再编写一个程序(在同一文件夹下),从文件中读取这个值
# import json  # 这个文件也要导入json模块存储数据

with open('num.txt') as f:  # 打开num.txt文本文件
    number = json.load(f)  # 把文件内容赋值给变量

print("我知道你最喜欢的数是:" + str(number) + ".")  # 打印出来
"""练习10-12  记住喜欢的数
将练习10-11中的两个程序合而为一。
1.如果存储了用户喜欢的数,就向用户显示它;
2.否则提示用户输入他喜欢的数并将其存储到文件中。
3.运行这个程序两次,看看它是否像预期的那样工作"""

# 将练习10-11中的两个程序合而为一
import json  # 导入json模块存储数据

# 1 如果存储了用户喜欢的数,就向用户显示它
try:  # 如果用户出错(文件存在)
    with open('num.txt') as f:  # 打开num.txt文本文件
        number = json.load(f)  # 把文件内容赋值给变量

# 2 否则提示用户输入他喜欢的数并将其存储到文件中
except FileNotFoundError:  # 用户出错(文件不存在)
    number = input("你最喜欢的数是: ")  # 提示用户
    with open('num.txt', 'w') as f:  # 写入方式打开文件(会自动新建一个)起个别名f
        json.dump(number, f)  # 调用json模块里dump函数存储到文件
    print("我会记住你最喜欢的数")

else:
    print("我知道你最喜欢的数是:" + str(number))  # 打印出来

# 3 把文本文件删除运行
"""练习10-13  验证用户
最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。
1.我们应修改这个程序,以应对这样的情形:当前和最后一次运行该程序的用户并非同一个人。
2.为此,在greet_user()中打印欢迎用户回来的消息前,询问他用户名是否是对的。
3.如果不对,就调用get_new_username()让用户输入正确的用户名。"""

import json  # josn是一种文本格式

# 1 看名字是否重复,
def get_stored_username():
    """获取存储的用户名——如果存储了。"""
    filename = 'username.json' # 把文本文件赋值给变量
    try:  # 如果文件存在就
        with open(filename) as f_obj:  # 打开文本文件起个别名
            username = json.load(f_obj)  # 读取文本内容并赋值给变量
            
    except FileNotFoundError:  # 反之文件不存在就
        return None  # 返回空
    else:  # 如果文件存在就返回名字
        return username


# 2 询问他用户名是否是对的
def greet_user():
    """基于用户名问候用户。"""
    username = get_stored_username()  # 读取文本内容
    if username:  # 如果名字是最后一次的用户一样
        correct = input("你是:" + username + "? (y/n) ")  # 提示用户输入
        if correct == 'y':  # 如果回答是最后一次的用户
            print("欢迎回来 " + username + "!")  # 打印提示语
            return  # 返回

    username = get_new_username()  # 获得了用户名,但不对,就重新输入名字
    print("当你回来的时候,我们会记住你的 " + username + "!")  # 打印

# 3 如果没有重新输入
def get_new_username():
    """提示用户输入用户名。"""
    username = input("你叫什么名字: ")  # 提示用户输入
    filename = 'username.json'  # 把文本文件赋值给变量
    with open(filename, 'w') as f_obj:  # 以写入的方式打开文件
        json.dump(username, f_obj)  # 把名字写入文本
    return username  # 返回名字


greet_user()  # 调用询问函数

你可能感兴趣的:(课后练习题,python)