作業(yè)要求:下述所有代碼畫圖以及分析代碼執(zhí)行流程
1、以定義階段為準(zhǔn)古毛,先畫出名稱空間的嵌套關(guān)系圖
2枚碗、然后找到調(diào)用函數(shù)的位置逾一,寫出函數(shù)調(diào)用時(shí)代碼的執(zhí)行過程,涉及到名字的查找時(shí)肮雨,參照1中畫好
的嵌套圖,標(biāo)明查找順序箱玷,一層一層直到找到位置
===================題目一===================
input=333
def func():
input=444
func()
print(input)
===================題目二===================
def func():
print(x)
x=111
func()
===================題目三===================
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
===================題目四===================
input=111
def f1():
def f2():
# input=333
print(input)
input=222
f2()
f1()
===================題目五===================
x=111
def func():
print(x) #
x=222
func()
===================題目六===================
x=111
def foo():
print(x,)
def bar():
print(x)
foo()
bar()
===================題目七===================
x=1
def func2():
func1()
x=2
def func1():
print(x)
x=3
func2()
===================題目八===================
1怨规、如下全局變量記錄了當(dāng)前登錄用戶,編寫登錄功能锡足,一旦用戶登錄成功波丰,則將全局變量賦值為當(dāng)前登錄的用戶名
login_user=None
2、針對之前編寫的查詢余額的功能舶得,添加額外的邏輯:如果用戶沒有登錄掰烟,則先執(zhí)行登錄功能
day12的作業(yè)優(yōu)化版,對代碼進(jìn)行更多的封裝,且在添加新功能時(shí)主函數(shù)atm()可以不動(dòng)
def modify(username,m,old_cont = '0', new_cont = '0'):
import os
with open('day13.txt', mode='r', encoding='utf-8') as read_f, \
open('.day13.txt.swap', mode='w', encoding='utf-8') as write_f:
"""
實(shí)現(xiàn)文件單行修改纫骑,一行一行讀出內(nèi)容蝎亚,當(dāng)賬號(hào)配對之后,對此行內(nèi)容repalce先馆,結(jié)束循環(huán)发框,利用n計(jì)數(shù),
再使用一個(gè)for循環(huán)煤墙,把后面的內(nèi)容原封不動(dòng)寫入梅惯,range(n,len(lines))用來作為后續(xù)寫入的條件
"""
lines = read_f.readlines()
n = 0
for line in lines:
if username in line:
line = line.replace(old_cont,new_cont)
write_f.write(line)
n += 1
break
write_f.write(line)
n += 1
for i in range(n, len(lines)):
write_f.write(lines[i])
os.remove('day13.txt')
os.rename(".day13.txt.swap","day13.txt")
if m == '1':
return "充值成功"
else:
return "提現(xiàn)成功"
def add_money(username,gold):
with open('day13.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
old = list[2]
new = str(int(list[2]) + int(gold))
return old,new
def reduce_money(username,gold):
with open('day13.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
old = list[2]
new = str(int(list[2]) - int(gold))
return old,new
def trans(username):
transto = input("請輸入您要轉(zhuǎn)賬的用戶名:").strip()
gold = input("請輸入轉(zhuǎn)賬的金額:").strip()
old,new = reduce_money(username,gold)
res1 = modify(username, '3', old, new)
old,new = add_money(transto,gold)
res2 = modify(transto,'1',old,new)
if res1 == '提現(xiàn)成功' and res2 == '充值成功':
print("轉(zhuǎn)賬成功")
else:
print("轉(zhuǎn)賬失敗")
def login():
while True:
username = input("請輸入您的用戶名:").strip()
password = input("請輸入您的密碼:").strip()
with open('day13.txt',mode='r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if username == list[0]:
if password == list[1]:
print("登錄成功")
return username
break
else:
print("密碼錯(cuò)誤")
break
else:
print("賬號(hào)不存在")
def recharge(username):
gold = input("請輸入您充值的金額:").strip()
old,new = add_money(username,gold)
res = modify(username, '1', old, new)
print(res)
def check(username):
with open('day13.txt', mode='r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if username == list[0]:
print(f"您的余額為{list[2]}元")
break
def withdraw(username):
gold = input("請輸入您提現(xiàn)的金額:").strip()
old,new = reduce_money(username,gold)
res = modify(username, '3', old, new)
print(res)
func_dic = {
'1':[recharge,'充值'],
'2':[trans,'轉(zhuǎn)賬'],
'3':[withdraw,'提現(xiàn)'],
'4':[check,'查詢'],
}
def atm():
print("歡迎使用ATM機(jī)")
username = login()
while username:
print(f"歡迎{username}使用ATM機(jī),請輸入相應(yīng)指令")
print('0 退出')
for k in func_dic:
print(f'{k} {func_dic[k][1]}')
order = input("請輸入您的指令:").strip()
if order == '0':
break
elif order in func_dic:
func_dic.get(order)[0](username)
else:
print("未知的指令")
atm()