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。 將修改后的各行都打印到屏幕上。
  

 

10-1

#learning_python.tx
In Python you can learn variable
In Python you can learn list
In Python you can learn Operation list
In Python you can learn dictionary
In Python you can learn class

 

#第一次打印時讀取整個文件
with open('learning_python.txt') as file_object:
    contents = file_object.read()
    print(contents)

#第二次打印時遍歷文件對象
filename = 'learning_python.txt'
with open(filename) as file_object:
    for line in file_object:
        print(line. rstrip())


#第三次打印時將各行存儲在一個列表中
filename = 'learning_python.txt'
with open (filename) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line. rstrip() )

 

輸出結果:

In Python you can learn variable
In Python you can learn list
In Python you can learn Operation list
In Python you can learn dictionary
In Python you can learn class

 

 

 

10-2

filename = 'learning_python.txt'
with open (filename) as file_object:
    lines = file_object.readlines()
for line in lines:
    c = line.replace('Python', 'c++')
    print(c)

#輸出:
In c++ you can learn variable

In c++ you can learn list

In c++ you can learn Operation list

In c++ you can learn dictionary

In c++ you can learn class

 

 

10-3 訪客 : 編寫一個程序, 提示用戶輸入其名字; 用戶作出響應后, 將其名字寫入到文件guest.txt中。
10-4 訪客名單 : 編寫一個while 循環, 提示用戶輸入其名字。 用戶輸入其名字后, 在屏幕上打印一句問候語, 並將一條訪問記錄添加到文件guest_book.txt中。 確保這
個文件中的每條記錄都獨占一行。
10-5 關於編程的調查 : 編寫一個while 循環, 詢問用戶為何喜歡編程。 每當用戶輸入一個原因后, 都將其添加到一個存儲所有原因的文件中。

10-3  

filename = 'learning_python.txt'
with open(filename,'w') as file_object:
    message = input('請輸入名字:')
    file_object.write(message)

#輸出:
請輸入名字:cc
cc

 

 

10-4

filename = 'learning_python.txt'
with open(filename,'a') as file_object:
    while True:
        message = input('請輸入名字:')
        if message == 'q':
            break
        else:
            print('Hello ' + message)
        file_object.write('\nHello ' + message)
    #如果這里的縮進和while一樣,那么輸出的只有q的信息,如果和if一樣,則輸出的信息都有


#輸出:
請輸入名字:qq
Hello qq
請輸入名字:cc
Hello cc
請輸入名字:q


#文本信息:

Hello qq
Hello cc

 

 

 

10-5

filename = 'learning_python.txt'
with open(filename,'a') as file_object:
    while True:
        message = input('Why do you like programming:')
        if message == 'q':
            break
        else:
            print('Reason ' + message)
            reason = ''
            reason += message
            print(reason)
        file_object.write('\nReason ' + reason)
    #如果這里的縮進和while一樣,那么輸出的只有q的信息,如果和if一樣,則輸出的信息都有

 

10-6 加法運算 : 提示用戶提供數值輸入時, 常出現的一個問題是, 用戶提供的是文本而不是數字。 在這種情況下, 當你嘗試將輸入轉換為整數時, 將引
發TypeError 異常。 編寫一個程序, 提示用戶輸入兩個數字, 再將它們相加並打印結果。 在用戶輸入的任何一個值不是數字時都捕獲TypeError 異常, 並打印一
條友好的錯誤消息。 對你編寫的程序進行測試: 先輸入兩個數字, 再輸入一些文本而不是數字。
10-7 加法計算器 : 將你為完成練習 10-6而編寫的代碼放在一個while 循環中, 讓用戶犯錯(輸入的是文本而不是數字) 后能夠繼續輸入數字。
10-8 貓和狗 : 創建兩個文件cats.txt和dogs.txt, 在第一個文件中至少存儲三只貓的名字, 在第二個文件中至少存儲三條狗的名字。 編寫一個程序, 嘗試讀取這些文件,
並將其內容打印到屏幕上。 將這些代碼放在一個try-except 代碼塊中, 以便在文件不存在時捕獲FileNotFound 錯誤, 並打印一條友好的消息。 將其中一個文件
移到另一個地方, 並確認except 代碼塊中的代碼將正確地執行。
10-9 沉默的貓和狗 : 修改你在練習 10-8中編寫的except 代碼塊, 讓程序在文件不存在時一言不發。
10-10 常見單詞 : 訪問項目 Gutenberg( http://gutenberg.org/ ) , 並找一些你想分析的圖書。 下載這些作品的文本文件或將瀏覽器中的原始文本復制到文本文件中。
你可以使用方法count( ) 來確定特定的單詞或短語在字符串中出現了多少次。 例如, 下面的代碼計算' row' 在一個字符串中出現了多少次:

>>> line = "Row, row, row your boat"
>>> line. count(' row' )
2>
>> line. lower() . count(' row' )
3

  

 10-6

try:
    inp_msg = input('請輸入數字:')
    inp_msg_toInt = int(inp_msg)
except ValueError:  
    print('只能輸入整型')  
else:  
    print(inp_msg_toInt)  

#輸出:
請輸入數字:2
2
#或者
請輸入數字:e
只能輸入整型

 

10-7

while True:
    try:
        inp_msg = input('請輸入數字:')
        inp_msg_toInt = int(inp_msg)
    except ValueError:
        print('只能輸入整型')
    else:
        print(inp_msg_toInt)
        break#在這里break好啊,為了能夠一直循環上面的輸入

#輸出
請輸入數字:e
只能輸入整型
請輸入數字:w
只能輸入整型
請輸入數字:2
2

 

10-8

錯誤答案 

##########讀、寫、清屏函數,不用try,直接造##################  
f_name_a = 'msg/cats.txt'  
f_name_b = 'msg/dogs.txt'  
  
def write(f_name_x,msg):  
    with open(f_name_x,'a') as f:  
        f.write(msg)  
def read(f_name_x):  
    with open(f_name_x) as f:  
        con = f.read()  
        print(con.rstrip())  
def clear(f_name_x):  
    with open(f_name_x,'w') as f:  
        f.truncate()  
clear(f_name_a)  
clear(f_name_b)  
write(f_name_a,'cat1\n')  
write(f_name_a,'cat2\n')  
write(f_name_a,'cat3\n')  
write(f_name_b,'dog1\n')  
write(f_name_b,'dog2\n')  
write(f_name_b,'dog3\n')  
read(f_name_a)  
read(f_name_b)  

#輸出
  File "C:/Python36/day10/s1.py", line 18, in clear
    with open(f_name_x, 'w') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'msg/cats.txt'

 

正確答案 

##########正確答案############  
def open_file(f_name):  
    try:  
        with open(f_name) as f_n:  
            con = f_n.read()  
    except FileNotFoundError:  
        print('404 not found!')  
    else:  
        print(con.rstrip())  
ur_list = [ 'msg/cats.txt', 'msg/dogs.txt']  
for i in ur_list:  
    open_file(i)  

#輸出:
404 not found!
404 not found!

 

10-9

def open_file(f_name):  
    try:  
        with open(f_name) as f_n:  
            con = f_n.read()  
    except FileNotFoundError:  
        pass  
    else:  
        print(con.rstrip())  
ur_list = [ 'msg/cats.txt', 'msg/dogs.txt']  
for i in ur_list:  
    open_file(i)  

 

 

 10-10l略

10-11 喜歡的數字 : 編寫一個程序, 提示用戶輸入他喜歡的數字, 並使用j son. dump( ) 將這個數字存儲到文件中。 再編寫一個程序, 從文件中讀取這個值, 並打印
消息“I know your favorite number! It's _____.”。
10-12 記住喜歡的數字 : 將練習 10-11中的兩個程序合而為一。 如果存儲了用戶喜歡的數字, 就向用戶顯示它, 否則提示用戶輸入他喜歡的數字並將其存儲到文件中。
運行這個程序兩次, 看看它是否像預期的那樣工作。
10-13 驗證用戶 : 最后一個remember_me.py版本假設用戶要么已輸入其用戶名, 要么是首次運行該程序。 我們應修改這個程序, 以應對這樣的情形: 當前和最后一次
運行該程序的用戶並非同一個人。
為此, 在greet_user( ) 中打印歡迎用戶回來的消息前, 先詢問他用戶名是否是對的。 如果不對, 就調用get_new_username( ) 讓用戶輸入正確的用戶名。

10-11

import json
f_name = 'msg/inp_10_11.json'
msg_inp = input('請輸入您喜歡的數字:')
with open(f_name,'w') as fn:
    json.dump(msg_inp,f_n)#數字存儲到文件中
with open(f_name) as fn1:
    c = json.load(f_n)#文件中讀取這個值
    print('I know your favorite number! It\'s '+ c)

 

10-12

filename = 'msg/fav_numb.json'  
try:  
    with open(filename) as f_obj:  
        fav_num = json.load(f_obj)  
except FileNotFoundError:  
    fav_num = input("請輸入你喜歡的數字:")  
    with open(filename, 'a') as f_obj:  
        json.dump(fav_num, f_obj)  
        print("你喜歡的數字:" + fav_num + "!")  
else:  
    print("你喜歡的數字:" + fav_num + "!")  

 

10-13

 

import json
def get_sorted_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_sorted_username()
    if username:
        result = input(username + "is right?")
        if result == 'y':
            print("Welcom back,", username, "!")
        else:
            username = get_new_username()
            print("Welcom back,", username, "!")
    else:
        username = get_new_username()
        print("We'll remember you when you come back,", username, "!")

if __name__ == "__main__":#表示執行的是此代碼所在的文件
    greet_user()

 

 如果是的話

#輸出
cccccis right?y
Welcom back, ccccc !

 

  如果不是的話

#輸出:
caofuis right?w
What is your name?wangshi
Welcom back, wangshi !


###文件里信息###
"wangshi"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM