Python学习笔记第14天

每日一句:生活中没有理想的人,是可怜的人。

# 异常
# 报错
# 处理ZeroDivisionError
# print(5/0) # 会报错 division by zero
# 使用try-except代码块 处理异常
try:
    print(5/0)
except ZeroDivisionError:
    print("你不能除以零!")
你不能除以零!
# 使用异常避免崩溃
print("Give me two number,and I'll divide them.")
print("Enter 'q' to quit.")
​
while True:
    first_number=input("\nFirst number: ")
    if first_number=='q':
        break
    second_number=input("\nSecond number: ")
    if second_number=='q':
        break
    answer = int(first_number) / int(second_number)
    print(answer)
Give me two number,and I'll divide them.
Enter 'q' to quit.

First number: 5

Second number: 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-9-0cec6e695e45> in <module>
     10     if second_number=='q':
     11         break
---> 12     answer = int(first_number) / int(second_number)
     13     print(answer)

ZeroDivisionError: division by zero
# else代码块
# 优化
print("Give me two number,and I'll divide them.")
print("Enter 'q' to quit.")
​
while True:
    first_number=input("\nFirst number: ")
    if first_number=='q':
        break
    second_number=input("\nSecond number: ")
    if second_number=='q':
        break
    try:
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("你不能除以零!")
    else:
        print(answer)
Give me two number,and I'll divide them.
Enter 'q' to quit.

First number: 5

Second number: 0
你不能除以零!

First number: 5

Second number: 2
2.5

First number: q
# 处理FileNotFoundError异常
filename='alice.txt'
with open(filename) as f_obj:
    contents=f_obj.read()
# 访问不存在的文件
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-13-09d0b6e503cf> in <module>
      1 # 处理FileNotFoundError异常
      2 filename='alice.txt'
----> 3 with open(filename) as f_obj:
      4     contents=f_obj.read()

FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt'

filename='alice.txt'
try:
    with open(filename) as f_obj:
        contents=f_obj.read()
except FileNotFoundError:
    msg="找不到 "+filename+",该文件可能不存在!!!"
    print(msg)
找不到 alice.txt,该文件可能不存在!!!
filename='book.txt'
try:
    with open(filename) as f_obj:
        contents=f_obj.read()
except FileNotFoundError:
    msg="找不到 "+filename+",该文件可能不存在!!!"
    print(msg)
else:
    "计算文件大约包含多少个单词"
    words=contents.split()
    num_words=len(words)
    print(filename+" 大约有 "+str(num_words)+" 个字。")
book.txt 大约有 145 个字。

使用多个文件

def count_words(filename):
    """计算文件大约包含多少个单词"""
    try:
        with open(filename) as f_obj:
            contents=f_obj.read()
    except FileNotFoundError:
        msg="找不到 "+filename+",该文件可能不存在!!!"
        print(msg)
    else:
        """计算文件大约包含多少个单词"""
        words=contents.split()
        num_words=len(words)
        print(filename+" 大约有 "+str(num_words)+" 个字。")
    # filename='book.txt'
    # count_words(filename)
filenames=['test1.txt','test2.txt','test4.txt','book.txt']
for filename in filenames:
    count_words(filename)
test1.txt 大约有 251 个字。
test2.txt 大约有 163 个字。
找不到 test4.txt,该文件可能不存在!!!
book.txt 大约有 145 个字。
# 失败时,一声不吭
def count_words(filename):
    """计算文件大约包含多少个单词"""
    try:
        with open(filename) as f_obj:
            contents=f_obj.read()
    except FileNotFoundError:
        pass
#         msg="找不到 "+filename+",该文件可能不存在!!!"
#         print(msg)
    else:
        """计算文件大约包含多少个单词"""
        words=contents.split()
        num_words=len(words)
        print(filename+" 大约有 "+str(num_words)+" 个字。")
    # filename='book.txt'
    # count_words(filename)
filenames=['test1.txt','test2.txt','test4.txt','book.txt']
for filename in filenames:
    count_words(filename)
test1.txt 大约有 251 个字。
test2.txt 大约有 163 个字。
book.txt 大约有 145 个字。

数据存储

# 存储
import json
numbers=[2,3,5,7,11,13]
filename='numbers.json'
with open(filename,'w') as f_obj:
    json.dump(numbers,f_obj)
# 读取
import json
filename='numbers.json'
with open(filename) as f_obj:
    numbers=json.load(f_obj)
print(numbers)
[2, 3, 5, 7, 11, 13]
# 保存和读取用户信息
import json
username = input("What is your name? ")
filename='username.json'
with open(filename,'w') as f_obj:
    json.dump(username,f_obj)
    print("We'll remember you when you come back, "+username+"!")
What is your name? 李四
We'll remember you when you come back, 李四!
# 再次回来
import json
filename='username.json'
with open(filename) as f_obj:
    username=json.load(f_obj)
    print("welcome back , "+username+"!")
welcome back , 李四!
import json
​
# 如果以前存储了用户名,就加载它
# 否则就提示用户输入用户名并存储
filename='username.json'
try:
    with open(filename) as f_obj:
        username=json.load(f_obj)
except FileNotFoundError:
    username = input("What is your name? ")
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
    print("We'll remember you when you come back, "+username+"!")
else:
     print("welcome back , "+username+"!")
welcome back , 李四!

重构

import json
​
def greet_user():
    """问候用户,指出其名字"""
    filename='username.json'
    try:
        with open(filename) as f_obj:
            username=json.load(f_obj)
    except FileNotFoundError:
        username = input("What is your name? ")
        with open(filename,'w') as f_obj:
            json.dump(username,f_obj)
        print("We'll remember you when you come back, "+username+"!")
    else:
         print("welcome back , "+username+"!")
greet_user()
# 在函数中尽量使用文档字符串来代替注释
welcome back , 李四!
import json
​
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
def greet_user():
    """问候用户,指出其名字"""
    username = get_stored_username()
    if username:
        print("welcome back , "+username+"!")
    else:
        username = input("What is your name? ")
        with open(filename,'w') as f_obj:
            json.dump(username,f_obj)
        print("We'll remember you when you come back, "+username+"!")
greet_user()    
​
# 使得函数的功能更加具体化,不再复杂
welcome back , 李四!
import json
​
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
def get_new_username():
    """提示用户输入用户名"""
    username = input("What is your name? ")
    filename='username.json'
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
    return username
​
def greet_user():
    """问候用户,指出其名字"""
    username = get_stored_username()
    if username:
        print("welcome back , "+username+"!")
    else:
        username=get_new_username()
        print("We'll remember you when you come back, "+username+"!")
greet_user()    
# 最终版本,将一个函数重构成三个,使得功能更加的具体
welcome back , 李四!
posted @ 2020-04-19 23:21  过气诗人  阅读(159)  评论(0)    收藏  举报