天天看點

python程式設計從入門到實踐,第十章練習題

 10-1 Python學習筆記 :在文本編輯器中建立一個檔案,寫幾句話來總結一下你至此學到的Python知識,其中每一行都以“In Python you can”打頭。将這個檔案命名為 learning_python.txt,并将其存儲到為完成本章練習而編寫的程式所在的目錄中。編寫一個程式,它讀取這個檔案,并将你所寫的内容列印三次:

第一次列印時讀取整個 檔案;

path = "C:/Users/Administrator/Desktop/learning_python.txt"
with open(path) as paths:
    lines=paths.read()
    print(lines.rstrip())
           

第二次列印時周遊檔案對象;

path = "C:/Users/Administrator/Desktop/learning_python.txt"
with open(path) as paths:
    for lines in paths:
        print(lines.rstrip())
           

第三次列印時将各行存儲在一個清單中,再在with 代碼塊外列印它們。

path = "C:/Users/Administrator/Desktop/learning_python.txt"
with open(path) as paths:
    lines=paths.readlines()
print(lines)
           

10-2 C語言學習筆記 :可使用方法replace() 将字元串中的特定單詞都替換為另一個單詞。下面是一個簡單的示例,示範了如何将句子中的'dog' 替換為'cat' :

>>> message = "I really like dogs."
>>> message.replace('dog', 'cat')
'I really like cats.'
           

讀取你剛建立的檔案learning_python.txt中的每一行,将其中的Python都替換為另一門語言的名稱,如C。将修改後的各行都列印到螢幕上。

path = "C:/Users/Administrator/Desktop/learning_python.txt"
with open(path) as paths:
    line=paths.read()
    print(line.rstrip().replace('Python','C'))
           

10-3 訪客 :編寫一個程式,提示使用者輸入其名字;使用者作出響應後,将其名字寫入到檔案guest.txt中。

path = "C:/Users/Administrator/Desktop/guest_book.txt"
with open(path,"w") as paths:
    name=input("請輸入名字:")
    paths.write(name)
           

10-4 訪客名單 :編寫一個while 循環,提示使用者輸入其名字。使用者輸入其名字後,在螢幕上列印一句問候語,并将一條通路記錄添加到檔案guest_book.txt中。確定這 個檔案中的每條記錄都獨占一行。

path = "C:/Users/Administrator/Desktop/guest_book.txt"
print("請輸入q退出")
while True:
    name=input("請輸入名字:")
    if name=="q":
        break
    else:
        print("hello "+name)
        with open(path,"a") as paths:
            paths.write(name+"\n")
           

10-5 關于編的調查 :編寫一個while 循環,詢問使用者為何喜歡程式設計。每當使用者輸入一個原因後,都将其添加到一個存儲所有原因的檔案中。

path = "C:/Users/Administrator/Desktop/pi_digits.txt"
print("請輸入q退出")
while True:
    cause=input("Why do you like programming?:")
    if cause=="q":
        break
    else:
        with open(path,"a") as paths:
            paths.write(cause+"\n")
           

10-6 加法運算 :提示使用者提供數值輸入時,常出現的一個問題是,使用者提供的是文本而不是數字。在這種情況下,當你嘗試将輸入轉換為整數時,将引 發TypeError 異常。編寫一個程式,提示使用者輸入兩個數字,再将它們相加并列印結果。在使用者輸入的任何一個值不是數字時都捕獲TypeError 異常,并列印一條友好的錯誤消息。對你編寫的程式進行測試:先輸入兩個數字,再輸入一些文本而不是數字。 (文本給的TypeError是錯誤的應該是ValueError)

number=input("請輸入數字")
numbers=input("請輸入數字")
try:
    answer=int(number)+int(numbers)
except ValueError:
    print("你輸入的不是兩個數字")
else:
    print(answer)
           

10-7 加法電腦 :将你為完成練習10-6而編寫的代碼放在一個while 循環中,讓使用者犯錯(輸入的是文本而不是數字)後能夠繼續輸入數字。

while True:
    number=input("請輸入數字")
    if number=="quit":
        break
    numbers=input("請輸入數字")
    try:
        answer=int(number)+int(numbers)
    except ValueError:
        print("你輸入的不是兩個數字")
    else:
        print(answer)
           

10-8 貓和狗 :建立兩個檔案cats.txt和dogs.txt,在第一個檔案中至少存儲三隻貓的名字,在第二個檔案中至少存儲三條狗的名字。編寫一個程式,嘗試讀取這些檔案, 并将其内容列印到螢幕上。将這些代碼放在一個try-except 代碼塊中,以便在檔案不存在時捕獲FileNotFound 錯誤,并列印一條友好的消息。将其中一個檔案 移到另一個地方,并确認except 代碼塊中的代碼将正确地執行。

def Zoology(cat):
    try:
        with open(cat,encoding="UTF-8") as cat:
            cats=cat.read()
    except FileNotFoundError:
        print("找不到此檔案")
    else:
        print(cats)
cat=["C:/Users/zhang/Desktop/cat.txt"
    ,"C:/Users/zhang/Desktop/user.txt"]
for i in cat:
    Zoology(i)
           

10-9 沉默的貓和狗 :修改你在練習10-8中編寫的except 代碼塊,讓程式在檔案不存在時一言不發。

def Zoology(cat):
    try:
        with open(cat,encoding="UTF-8") as cat:
            cats=cat.read()
    except FileNotFoundError:
        pass#找不到此檔案不會報錯,繼續執行下一個
    else:
        print(cats)
cat=["C:/Users/zhang/Desktop/ca.txt"
    ,"C:/Users/zhang/Desktop/user.txt"]
for i in cat:
    Zoology(i)
           

10-10 常見單詞 :通路項目Gutenberg(http://gutenberg.org/ ),并找一些你想分析的圖書。下載下傳這些作品的文本檔案或将浏覽器中的原始文本複制到文本檔案中。

你可以使用方法count() 來确定特定的單詞或短語在字元串中出現了多少次。例如,下面的代碼計算'row' 在一個字元串中出現了多少次:

>>> line = "Row, row, row your boat"

>>> line.count('row')

2

>>> line.lower().count('row')

3

def Zoology(cat):
    try:
        with open(cat,encoding="UTF-8") as cat:
            cats=cat.read()
    except FileNotFoundError:
        pass#找不到此檔案不會報錯,繼續執行下一個
    else:
        catse=cats.lower().count("like")
        print(catse)
cat="C:/Users/zhang/Desktop/user.txt"
Zoology(cat)
10-11 喜歡的數字
           

:編寫一個程式,提示使用者輸入他喜歡的數字,并使用json.dump() 将這個數字存儲到檔案中。再編寫一個程式,從檔案中讀取這個值,并列印 消息“I knowyour favorite number! It's _____.”。

import json
number = [1, 2, 3, 4]
filename = "number.json"
with open(filename,"w") as nu_m:
    json.dump(number,nu_m)
with open(filename) as nu_m:
    numbers=json.load(nu_m)
    print("I knowyour favorite number! It's "+str(numbers))
           

10-12 記記住住喜喜歡歡的的數數字字 :将練習10-11中的兩個程式合而為一。如果存儲了使用者喜歡的數字,就向使用者顯示它,否則提示使用者輸入他喜歡的數字并将其存儲到檔案中。 運作這個程式兩次,看看它是否像預期的那樣工作。

import json
def Number():
    filename = "number.json"
    try:
        with open(filename) as nu_m:
            numbers = json.load(nu_m)
    except FileNotFoundError:
        number = input("請輸入你喜歡的數字")
        with open(filename,"w") as nu_m:
            json.dump(number,nu_m)
    else:
        print("I knowyour favorite number! It's "+str(numbers))
Number()
           

10-13 驗證使用者 :最後一個remember_me.py版本假設使用者要麼已輸入其使用者名,要麼是首次運作該程式。我們應修改這個程式,以應對這樣的情形:目前和最後一次 運作該程式的使用者并非同一個人。 為此,在greet_user() 中列印歡迎使用者回來的消息前,先詢問他使用者名是否是對的。如果不對,就調用get_new_username() 讓使用者輸入正确的使用者名。

import json
def get_stored_username():
   # """如果儲存了就擷取他""""
    filename = "username.json"
    try:
        with open(filename) as f_obj:
            name=json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return name
def get_new_username():
    username=input("請輸入名字:")
    filename="username.json"
    with open(filename,"w") as f_obj:
        json.dump(username,f_obj)
    return username
def geet_user():
     filename=get_stored_username()
     if filename:
         while True:
             name = input("目前使用者名是'%s'是否是對的yes/no:" % (filename))
             if name=="yes":
                 print("歡迎回來"+filename)
                 break
             elif name=="no":
                 username = get_new_username()
                 print("你好" + username)
                 break
             elif name!="yes" or  name!="no":#輸入的既不是yes也不是no提示請輸入yes/no
                 print("請輸入yes/no")
                 continue
     else:
        username=get_new_username()
        print("你好"+username)
geet_user()
           
異常名稱 描述
BaseException 所有異常的基類
SystemExit 解釋器請求退出
KeyboardInterrupt 使用者中斷執行(通常是輸入^C)
Exception 正常錯誤的基類
StopIteration 疊代器沒有更多的值
GeneratorExit 生成器(generator)發生異常來通知退出
SystemExit Python 解釋器請求退出
StandardError 所有的内建标準異常的基類
ArithmeticError 所有數值計算錯誤的基類
FloatingPointError 浮點計算錯誤
OverflowError 數值運算超出最大限制
ZeroDivisionError 除(或取模)零 (所有資料類型)
AssertionError 斷言語句失敗
AttributeError 對象沒有這個屬性
EOFError 沒有内建輸入,到達EOF 标記
EnvironmentError 作業系統錯誤的基類
IOError 輸入/輸出操作失敗
OSError 作業系統錯誤
WindowsError 系統調用失敗
ImportError 導入子產品/對象失敗
KeyboardInterrupt 使用者中斷執行(通常是輸入^C)
LookupError 無效資料查詢的基類
IndexError 序列中沒有沒有此索引(index)
KeyError 映射中沒有這個鍵
MemoryError 記憶體溢出錯誤(對于Python 解釋器不是緻命的)
NameError 未聲明/初始化對象 (沒有屬性)
UnboundLocalError 通路未初始化的本地變量
ReferenceError 弱引用(Weak reference)試圖通路已經垃圾回收了的對象
RuntimeError 一般的運作時錯誤
NotImplementedError 尚未實作的方法
SyntaxError Python 文法錯誤
IndentationError 縮進錯誤
TabError Tab 和空格混用
SystemError 一般的解釋器系統錯誤
TypeError 對類型無效的操作
ValueError 傳入無效的參數
UnicodeError Unicode 相關的錯誤
UnicodeDecodeError Unicode 解碼時的錯誤
UnicodeEncodeError Unicode 編碼時錯誤
UnicodeTranslateError Unicode 轉換時錯誤
Warning 警告的基類
DeprecationWarning 關于被棄用的特征的警告
FutureWarning 關于構造将來語義會有改變的警告
OverflowWarning 舊的關于自動提升為長整型(long)的警告
PendingDeprecationWarning 關于特性将會被廢棄的警告
RuntimeWarning 可疑的運作時行為(runtime behavior)的警告
SyntaxWarning 可疑的文法的警告
UserWarning 使用者代碼生成的警告