Python编程从入门到实践课后答案:第十章

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

# @Time    : 2018/11/27 下午4:24
# @Author  : 郑超
# @Desc    :
In Python you can "spider"
In Python you can "web"
In Python you can "AI"
In Python you can "R"
# 10-1
with open("learning_python.txt", encoding="utf8") as f:
    content = f.read()
    print(content)

# 10-2
with open("learning_python.txt", encoding="utf8") as f:
    content = f.read()
    c = content.replace("Python", "C")
    print(c)

10-3 访客 :编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件guest.txt中。
10-4 访客名单 :编写一个while 循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,并将一条访问记录添加到文件guest_book.txt中。确保这
个文件中的每条记录都独占一行。
10-5 关于编程的调查 :编写一个while 循环,询问用户为何喜欢编程。每当用户输入一个原因后,都将其添加到一个存储所有原因的文件中。

# 10-3
name = input("请输入你的名字:")
f = open("guest.txt", "a", encoding="utf8")
f.write(name)
f.close()

# 10-4
while True:
    name = input("请输入你的名字:")
    if name == "q" or name == "quit":
        break
    print("欢迎你 %s" % name)
    f = open("guest_book.txt", "a", encoding="utf8")
    f.write(name + "\n")
    f.close()
# 10-5
while True:
    name = input("你为何喜欢编程:\n")
    if name == "q" or name == "quit":
        break
    f = open("reason.txt", "a", encoding="utf8")
    f.write(name + "\n")
    f.close()

10-6 加法运算 :提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引
发TypeError 异常。编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获TypeError 异常,并打印一
条友好的错误消息。对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。
10-7 加法计算器 :将你为完成练习10-6而编写的代码放在一个while 循环中,让用户犯错(输入的是文本而不是数字)后能够继续输入数字。

# 10-6
num = input("请输入第一个数字: \n")
num1 = input("请输入第二个数字: \n")
try:
    print(int(num) + int(num1))
except:
    print("输入的不是数字,程序结束")
# 10-7
while True:
    num = input("请输入第一个数字: \n")
    num1 = input("请输入第二个数字: \n")
    if num == "q" or num1 == "q":
        break
    try:
        print(int(num) + int(num1))
        break
    except:
        print("输入的不是数字,请重新输入" + "*" * 30 + ":")

10-8 猫和狗 :创建两个文件cats.txt和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文件,
并将其内容打印到屏幕上。将这些代码放在一个try-except 代码块中,以便在文件不存在时捕获FileNotFound 错误,并打印一条友好的消息。将其中一个文件
移到另一个地方,并确认except 代码块中的代码将正确地执行。
10-9 沉默的猫和狗 :修改你在练习10-8中编写的except 代码块,让程序在文件不存在时一言不发。

# 10-8
txts = ["cats.txt", 'dogs.txt']
for i in txts:
    try:
        with open(i, encoding="utf8") as f:
            contents = f.read()
            print(contents)
    except FileNotFoundError:
        print("The file %s does not exist." % i)
      
 # 10-9
txts = ["cats.txt", 'dogs.txt']
for i in txts:
    try:
        with open(i, encoding="utf8") as f:
            contents = f.read()
            print(contents)
    except FileNotFoundError:
		pass

10-10 常见单词 :访问项目Gutenberg(http://gutenberg.org/ ),并找一些你想分析的图书。下载这些作品的文本文件或将浏览器中的原始文本复制到文本文件中。
你可以使用方法count() 来确定特定的单词或短语在字符串中出现了多少次。例如,下面的代码计算’row’ 在一个字符串中出现了多少次:
line = “Row, row, row your boat”
line.count(‘row’)
2
line.lower().count(‘row’)
3
请注意,通过使用lower() 将字符串转换为小写,可捕捉要查找的单词出现的所有次数,而不管其大小写格式如何。
编写一个程序,它读取你在项目Gutenberg中获取的文件,并计算单词’the’ 在每个文件中分别出现了多少次。
出师表.txt

先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。

宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。

侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。

将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。

亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。

臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。

先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。

愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。

今当远离,临表涕零,不知所言。

“先帝” 出现的次数

with open("出师表.txt", encoding="utf8") as f:
    content = f.read()
    print(content.count("先帝"))

#10-11 喜欢的数字 :编写一个程序,提示用户输入他喜欢的数字,并使用json.dump() 将这个数字存储到文件中。再编写一个程序,从文件中读取这个值,并打印
消息“I knowyour favorite number! It’s _____.”。

import json
num = input("请输入你喜欢的数字:")
with open("num.json", 'w') as f:
    json.dump(num, f)
with open("num.json") as f:
    number = json.load(f)
    print("I know your favorite number! " + number)

10-12 记住喜欢的数字 :将练习10-11中的两个程序合而为一。如果存储了用户喜欢的数字,就向用户显示它,否则提示用户输入他喜欢的数字并将其存储到文件中。
运行这个程序两次,看看它是否像预期的那样工作。

import json

filename = 'num.json'
try:
    with open(filename) as f:
        number = json.load(f)
except:
    number = input("请输入你喜欢的数字:")
    with open(filename, 'w') as f:
        json.dump(number, f)
        print("I know you favorite number is " + number)
else:
    print("I know you favorite number is " + number)

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

"\u4f60\u7239"
import json


def get_stored_username():
    filename = 'username.json'
    try:
        with open(filename) as f:
            username = json.load(f)
    except:
        return None
    else:
        return username


def get_new_username():
    filename = 'username.json'
    username = input("请输入你的名字: ")
    with open(filename, "w") as f:
        json.dump(username, f)
        return username


def greet_user():
    username = get_stored_username()
    new_name = "%s 是你吗" % username
    confirm = input(new_name + " 如果是你,就输入'1';不是输入'0'")
    if confirm == '1':
        print("欢迎回来 %s ! " % username)
    else:
        username = get_new_username()
        print("你的正确名字是%s" % username)


greet_user()

猜你喜欢

转载自blog.csdn.net/weixin_41827268/article/details/84568376