78、存儲(chǔ)數(shù)據(jù)課后習(xí)題

10-11喜歡的數(shù)字 :編寫一個(gè)程序,提示用戶輸入他喜歡的數(shù)字,并使用json.dump() 將這個(gè)數(shù)字存儲(chǔ)到文件中。

# -*- coding: utf-8 -*-
import  json

# 存儲(chǔ)用戶喜歡的數(shù)字
filename = "number.json"
number = raw_input("What is your favorite number: ")
with open(filename,"w") as f_obj:
    json.dump(number,f_obj)

print("Write success!")

結(jié)果:

What is your favorite number: 23
Write success!

Process finished with exit code 0

再編寫一個(gè)程序,從文件中讀取這個(gè)值,并打印消息“I know your favorite number! It's _____.”。

# -*- coding: utf-8 -*-
import  json

# 讀取用戶喜歡的數(shù)字
filename = "number.json"
with open(filename) as f_obj:
    number = json.load(f_obj)
print("I know your favorite number!It's " + number + ".")

結(jié)果:

I know your favorite number!It's 23.

Process finished with exit code 0

10-12記住喜歡的數(shù)字 :將練習(xí)10-11中的兩個(gè)程序合而為一。如果存儲(chǔ)了用戶喜歡的數(shù)字,就向用戶顯示它,否則提示用戶輸入他喜歡的數(shù)字并將其存儲(chǔ)到文件中。
運(yùn)行這個(gè)程序兩次,看看它是否像預(yù)期的那樣工作。
方法一:

# -*- coding: utf-8 -*-
import  json
# 如果以前存儲(chǔ)有數(shù)字,就讀取它
# 否則,提示用戶輸入它喜歡的數(shù)字并存儲(chǔ)
filename = "number.json"
try:
    with open(filename) as f_obj:
        number = json.load(f_obj)
except IOError:
    number = raw_input("What is your favorite number: ")
    with open(filename,"w") as f_obj:
        json.dump(number,f_obj)
else:
    print("I know your favorite number!It's " + number + ".")

第一次運(yùn)行結(jié)果:

What is your favorite number: 2323

Process finished with exit code 0

第二次運(yùn)行結(jié)果:

I know your favorite number!It's 2323.

Process finished with exit code 0

方法二:

# -*- coding: utf-8 -*-
import  json
def get_number():
    """如果存儲(chǔ)了數(shù)字,獲取它"""
    filename = "number.json"
    try:
        with open(filename) as f_obj:
            number = json.load(f_obj)
    except IOError:
        return None
    else:
        return number

def write_number():
    """提示用戶輸入喜歡的數(shù)字"""
    filename = "number.json"
    number = raw_input("What is your favorite number: ")
    with open(filename,"w") as f_obj:
        json.dump(number,f_obj)
        return number

def print_number():
    """打印用戶喜歡的數(shù)字"""
    number = get_number()
    if number:
        print("I know your favorite number!It's " + number + ".")
    else:
        number = write_number()
        print("I'll keep in mind that your favorite number is " + number)

print_number()

第一次運(yùn)行結(jié)果:

What is your favorite number: 2323
I'll keep in mind that your favorite number is 2323

Process finished with exit code 0

第二次運(yùn)行結(jié)果:

I know your favorite number!It's 2323.

Process finished with exit code 0

10-13驗(yàn)證用戶 :最后一個(gè)remember_me.py版本假設(shè)用戶要么已輸入其用戶名,要么是首次運(yùn)行該程序。我們應(yīng)修改這個(gè)程序,以應(yīng)對(duì)這樣的情形:當(dāng)前和最后一次運(yùn)行該程序的用戶并非同一個(gè)人。
為此,在greet_user() 中打印歡迎用戶回來的消息前,先詢問他用戶名是否是對(duì)的。如果不對(duì),就調(diào)用get_new_username() 讓用戶輸入正確的用戶名。
代碼如下:

# -*- coding: utf-8 -*-
import json
def get_stored_username():
    """如果存儲(chǔ)了用戶名,就獲取它"""
    filename = "username.json"
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except IOError:
        return None
    else:
        return username
def get_new_username():
    """提示用戶輸入用戶名"""
    username = raw_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:
        self_name = raw_input(username + " is your name?(yes/ no)\n ")
        if self_name == "yes":
            print("Welcome back, " + username + "!")
        else:
            username = get_new_username()
            print("I'll remember you when you come back, " + username + "!")
    else:
        username = get_new_username()
        print("I'll remember you when you come back, " + username + "!")

greet_user()

驗(yàn)證代碼:

What is your name: leilei
I'll remember you when you come back, leilei!

Process finished with exit code 0
leilei is your name?(yes/ no)
 no
What is your name: 23
I'll remember you when you come back, 23!

Process finished with exit code 0
23 is your name?(yes/ no)
 yes
Welcome back, 23!

Process finished with exit code 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評(píng)論 19 139
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,810評(píng)論 9 468
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,330評(píng)論 2 33
  • 昨天傍晚的一場(chǎng)急雨,把這座小城和朋友圈沖刷了一遍。雨來得急走得也快走,到了下班的時(shí)間,夕陽不甘寂寞地?fù)荛_了烏云,紅...
    齊魯說法閱讀 259評(píng)論 0 0
  • 王姐身體不舒服,老李帶她去看病,說要開刀。我在想,未來的哪天,我生病了,誰來照顧我呢?我想有個(gè)家~~在找到家之前,...
    遇見繁花閱讀 204評(píng)論 0 0

友情鏈接更多精彩內(nèi)容