python函式與裝飾器的綜合應用

2022-09-18 06:51:26 字數 3583 閱讀 6301

編寫**閱讀程式實現下屬功能

# 一:程式執行開始時顯示

0 賬號註冊

1 充值功能

2 閱讀**

# 二: 針對檔案db.txt,內容格式為:"使用者名稱:密碼:金額",完成下述功能

2.1、賬號註冊

2.2、充值功能

# 三:檔案story_class.txt存放類別與**檔案路徑,如下,讀出來後可用eval反解出字典

,"1":,}

3.1、使用者登入成功後顯示如下內容,根據使用者選擇,顯示對應品類的**編號、**名字、以及**的**

"""0 玄幻武俠

1 都市愛情

2 高效養豬36技

"""3.2、使用者輸入具體的**編號,提示是否付費,使用者輸入y確定後,扣費並顯示**內容,如果餘額不足則提示餘額不足

# 四:為功能2.2、3.1、3.2編寫認證功能裝飾器,要求必須登入後才能執行操作

# 五:為功能2.2、3.2編寫記錄日誌的裝飾器,日誌格式為:"時間 使用者名稱 操作(充值or消費) 金額"

"""

分析:我們設定四個主體功能,賬號註冊,充值,購買**,登入認證,顯然登入認證功能要用裝飾器編寫

"""from functools import wraps

import os

# 註冊功能

def register(user_name, password):

with open(r'使用者資訊.txt', mode='at', encoding='utf-8') as f:

f.write(str(user_name))

f.write(':')

f.write(str(password))

f.write(':')

f.write('0')

f.write('\n')

print('註冊成功')

# 登入認證裝飾器

def auth(func):

@wraps(func)

in_user_name = input('請輸入你的賬號》')

in_user_password = input('請輸入密碼》')

with open(r'使用者資訊.txt', mode='rt', encoding='utf-8') as f:

for line in f:

username, password, money = line.strip('\n').split(':')

if in_user_name == username and in_user_password == password:

print('登入認證成功')

f.close()

res = func(*args, **kwargs)

return res

else:

print('驗證失敗,賬號或密碼錯誤')

# 充值功能

@auth

def recharge(user_name, money):

with open(r'使用者資訊.txt', mode='rt', encoding='utf-8') as f1, \

open(r'使用者資訊.txt.swap', mode='wt', encoding='utf-8') as f2:

for line in f1:

username, password, original_money = line.strip('\n').split(':')

if username == user_name:

new_balance = int(original_money) + int(money)

f2.write(f"::")

print('充值成功,餘額已經更新')

else:

f2.write(line)

os.remove(r'使用者資訊.txt')

os.rename(r'使用者資訊.txt.swap', r'使用者資訊.txt')

# 閱讀與購買功能

@auth

def shopping(user_name, cost):

with open(r'使用者資訊.txt', mode='rt', encoding='utf-8') as f1, \

open(r'使用者資訊.txt.swap', mode='wt', encoding='utf-8') as f2:

for line in f1:

username, password, original_money = line.strip('\n').split(':')

if username == user_name:

new_balance = int(original_money) - int(cost)

f2.write(f"::")

print('購買成功,餘額已更新,請及時查詢')

else:

f2.write(line)

os.remove(r'使用者資訊.txt')

os.rename(r'使用者資訊.txt.swap', r'使用者資訊.txt')

# 選單

print(' 0 賬號註冊》 \n 1 充值》 \n 2 購買書籍》\n-1 退出')

# 主控制程式

while true:

cmd = input('請輸入指令')

if cmd == '-1':

break

elif cmd == '0':

input_username = input('請輸入註冊使用者名稱》').strip()

input_password = input('請輸入註冊密碼》').strip()

register(input_username, input_password)

elif cmd == '1':

input_username = input('請輸入充值使用者名稱》').strip()

input_recharge_number = input('請輸入充值金額》').strip()

recharge(input_username, input_recharge_number)

elif cmd == '2':

with open(r'書籍倉庫.txt', mode='rt', encoding='utf-8') as f:

res = f.read()

book_dict = eval(res)

print("0 玄幻武俠\n1 都市愛情\n2 高效養豬36技")

type = input("請輸入你想購買的**型別編號:").strip()

print(book_dict[type])

book = input("請輸入你想購買的**編號:").strip()

print(book_dict[type][book])

book_cost = int(book_dict[type][book][1])

input_username = input('請確認您的使用者名稱')

shopping(input_username, book_cost)

**能力還是不足,對需求的實現有些地方過於冗餘,再接再厲。

Python之裝飾器(綜合練習)

裝飾器 案例1 建立裝飾器,要求如下 1.建立add log裝飾器,被裝飾的函式列印日誌資訊 import time import functools 定義裝飾器 def add log fun 保留被裝飾函式的函式名和幫助資訊文件 functools.wraps fun def inter arg...

高階函式與裝飾器函式python

高階函式是在python中乙個非常有用的功能函式,所謂高階函式就是乙個函式可以用來接收另乙個函式作為引數,這樣的函式叫做高階函式。map map 是 python 內建的高階函式,它接收乙個函式function 和乙個 list,並通過把函式 function 依次作用在 list 的每個元素上,得...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...