Python Learning Note Day 07

2018-03-27 0 条评论 1.09k 次阅读 0 人点赞

今天是Python学习第七天,主要学习第十章的内容:文件、异常、存储数据。基础部分就只剩下明天的代码测试了,但是感觉还不是很够,打算再看看另一本书补充部分知识后再进入后面的项目阶段。今天的Python写的一点都不舒服,真奇葩。

大纲

相关练习代码

with open(file_name) as file_object:
    for line in file_object:
        print(line.strip())
        # 由于
print('===========')
# 使用关键字with时,open()返回的文件对象只在with代码块内可用。
with open(file_name) as file_object:
    lines=file_object.readlines()
for line in lines:
    print(line)
print('===========')
pi_string=''
for line in lines:
    pi_string+=line.strip()
print(pi_string)
print(len(pi_string))
filename='pi_million_digits.txt'

with open(filename) as file_millons:
    string=file_millons.readlines()

pi_string=''
for line in string:
    pi_string+=line.strip()

# print(pi_string[:100])
# print(len(pi_string))
birthday=input('Tell me your birthday like mmddyy:')
if birthday in pi_string:
    print('Woo your birthday:'+birthday+' in the string')
else:
    print('Opps your birthday:' + birthday + ' not in the string')
# 10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至
# 此学到的Python 知识,其中每一行都以“In Python you can”打头。将这个文件命名为
# learning_python.txt,并将其存储到为完成本章练习而编写的程序所在的目录中。编写一
# 个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个文件;
# 第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在with 代码
# 块外打印它们。
file_name='learning_python.txt'
with open(file_name) as file_object:
    python_string=file_object.read()
    print(python_string)

with open(file_name) as file_object:
    for line in file_object:
        print(line)

with open(file_name) as file_object:
    file_list=file_object.readlines()
for item in file_list:
    print(item)
print(file_list)

# 10-2 C 语言学习笔记:可使用方法replace()将字符串中的特定单词都替换为另一
# 个单词。下面是一个简单的示例,演示了如何将句子中的'dog'替换为'cat':
# >>> message = "I really like dogs."
# >>> message.replace('dog', 'cat')
# 'I really like cats.'
# 读取你刚创建的文件learning_python.txt 中的每一行,将其中的Python 都替换为另
# 一门语言的名称,如C。将修改后的各行都打印到屏幕上。
with open(file_name) as file_object:
    list=file_object.readlines()
for line in list:
    print(line.replace('Python','PHP'))
# 写入文件
file_name='file_write_w.txt'
with open(file_name,'w') as file_object:
    file_object.write('wwwwww')
# file_name='file_write_w.txt'
with open(file_name,'w+') as file_object:
    file_object.write('w+w+w+')
with open(file_name,'a') as file_object:
    file_object.write('aaaaaa')


# 注意 Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数
# str()将其转换为字符串格式。


# r只读,r+读写,不创建
#
# w新建只写,w+新建读写,二者都会将文件内容清零(以w方式打开,不能读出。w+可读写)
#
# r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建
#
# r+进行覆盖写,a+追加写
#
# a:附加写方式打开,不可读;a+: 附加读写方式打开
#
# 若不存在会创建新文件的打开方式:a,a+,w,w+

with open(file_name,'w') as file_object:
    file_object.write('I love fyx\n')
    file_object.write('i love python')
    file_object.write('i love php')
    # file=file_object.read()
# 10-3 访客:编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写
# 入到文件guest.txt 中。
file_name='guest.txt'
name=input('What\' your name? ')
with open(file_name,'w') as file_object:
    file_object.write(name)

# 10-4 访客名单:编写一个while 循环,提示用户输入其名字。用户输入其名字后,
# 在屏幕上打印一句问候语,并将一条访问记录添加到文件guest_book.txt 中。确保这个
# 文件中的每条记录都独占一行。
file_name='guest_book.txt'
with open(file_name,'a') as file_object:
    while True:
        name=input('Your name plz(no or quiz): ')
        if name.lower() == 'no':
            break
        else:
            print('Welcome '+name)
            file_object.write(name+'\n')

# 10-5 关于编程的调查:编写一个while 循环,询问用户为何喜欢编程。每当用户输
# 入一个原因后,都将其添加到一个存储所有原因的文件中。
file_name='reasons.txt'
with open(file_name,'a') as file_object:
    while True:
        reason=input('why you love coding?(no for quit) ')
        if reason.lower() == 'no':
            break
        else:
            file_object.write(reason+'\n')
# 处理ZeroDivisionError 异常
# 把一个数字除以0的时候就会出现这个错误
try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

while True:
    print('Give me 2 numbers I can divided them and \'q\' to quit')
    num_1 = input('Now first number plz:  ')
    if num_1.lower() == 'q':
        break
    num_2 = input('Now second number plz:  ')
    if num_2.lower() == 'q':
        break
    try:
        ans = int(num_1) / int(num_2)
    except ZeroDivisionError:
        print('You can\'t divide by 0!')
    else:
        print(ans)
file_name='FileNotFoundError.txt'
try:
    with open(file_name) as file_object:
        file=file_object.read()
except FileNotFoundError:
    print('Opps the file '+file_name+' doesn\'t exist!')
else:
    print(file)

# 方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。
def count_words(file_name):
    """统计文件中有多少个单词"""
    try:
        with open(file_name) as file_object:
            contents = file_object.read()
    except FileNotFoundError:
        print('Sorry,the file ' + file_name + '  doesn\'t exist!')
        # 失败时一声不吭
        # pass
        # Python有一个pass语句,可在代码块中使用它来让Python什么都不要做
    else:
        words = contents.split()
        num = len(words)
        print(file_name + ' has ' + str(num) + ' words.')

file_list=['guest.txt','null.txt','alice.txt']
for file in file_list:
    count_words(file)
# 10-6 加法运算:提示用户提供数值输入时,常出现的一个问题是,用户提供的是
# 文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引发TypeError 异
# 常。编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的
# 任何一个值不是数字时都捕获TypeError 异常,并打印一条友好的错误消息。对你编写
# 的程序进行测试:先输入两个数字,再输入一些文本而不是数字。
while True:
    print('给我两个数,我给你它们的和(输入n停止运算)')
    num_1 = input('第一个数: ')
    if num_1.lower() == 'n':
        break
    num_2 = input('第二个数: ')
    if num_2.lower() == 'n':
        break
    try:
        ans = float(num_1) + float(num_2)
    except ValueError:
        print('加法是算数的哦,请重新输入')
    else:
        print(num_1+'+'+num_2+'='+str(ans))

# 10-7 加法计算器:将你为完成练习10-6 而编写的代码放在一个while 循环中,让
# 用户犯错(输入的是文本而不是数字)后能够继续输入数字。
# ---见上面代码

# 10-8 猫和狗:创建两个文件cats.txt 和dogs.txt,在第一个文件中至少存储三只猫的
# 名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文件,并
# 将其内容打印到屏幕上。将这些代码放在一个try-except 代码块中,以便在文件不存
# 在时捕获FileNotFound 错误,并打印一条友好的消息。将其中一个文件移到另一个地方,
# 并确认except 代码块中的代码将正确地执行。
def file_read(file_name):
    """读取并打印文件内容"""
    try:
        with open(file_name) as file_object:
            contents = file_object.read()
    except FileNotFoundError:
        print('Sorry,the file ' + file_name + '  doesn\'t exist!')
        # pass
    else:
        print(contents)
file_list=['cats.txt','dogs.txt','babys.txt']
for file in file_list:
    file_read(file)
# 10-9 沉默的猫和狗:修改你在练习10-8 中编写的except 代码块,让程序在文件不
# 存在时一言不发。
# 上题代码把print('Sorry,the file ' + file_name + '  doesn\'t exist!')注释了就OK

# 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'在每
# 个文件中分别出现了多少次。
def count_words(file_name,word):
    """统计文件中有多少个特定单词"""
    try:
        with open(file_name) as file_object:
            contents = file_object.read()
    except FileNotFoundError:
        print('Sorry,the file ' + file_name + '  doesn\'t exist!')
    else:
        num = contents.lower().count(word)
        print(file_name + ' 中有 ' + str(num) + ' 个'+word)

count_words('alice.txt','the')
# 存储数据
# json.dump()
import json

numbers=[2,4,5,6,8,9,0]
file_name='numbers.json'
with open(file_name,'w') as file_object:
    json.dump(numbers,file_object)
# json.load
import json

file_name='numbers.json'
with open(file_name) as file_object:
    numbers=json.load(file_object)

print(numbers)
import json
# 如果以前存储了用户名,就加载它
filename='username.json'
try:
    with open(filename) as file_obj:
        username = json.load(file_obj)
except FileNotFoundError:
    username = input("What is your name? ")
    with open(filename, 'w') as file_obj:
        json.dump(username, file_obj)
    print("We'll remember you when you come back, " + username + "!")
else:
    print("Welcome back, " + username + "!")
# 10-11 喜欢的数字:编写一个程序,提示用户输入他喜欢的数字,并使用
# json.dump()将这个数字存储到文件中。再编写一个程序,从文件中读取这个值,并打
# 印消息“I know your favorite number! It’s _____.”。
import json

num=input('你喜欢那个数字: ')
fname='num.json'
with open(fname,'w') as f_obj:
    json.dump(num,f_obj)
import json

fname='num.json'
with open(fname) as f_obj:
    num=json.load(f_obj)
print('I know your favorite number! It\'s '+num)
# 10-12 记住喜欢的数字:将练习10-11 中的两个程序合而为一。如果存储了用户喜
# 欢的数字,就向用户显示它,否则提示用户输入他喜欢的数字并将其存储到文件中。运
# 行这个程序两次,看看它是否像预期的那样工作。
import json

fname = 'num.json'
try:
    with open(fname) as f_obj:
        num = json.load(f_obj)
except FileNotFoundError:
    num = input('你喜欢那个数字: ')
    with open(fname, 'w') as f_obj:
        json.dump(num, f_obj)
else:
    print('I know your favorite number! It\'s ' + num)

明天收尾,加补充复习!

Kiwi

Valar Morghulis

文章评论(0)