作业要求:下述所有代码画图以及分析代码执行流程
1、以定义阶段为准,先画出名称空间的嵌套关系图
2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好
的嵌套图,标明查找顺序,一层一层直到找到位置
===================题目一===================
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、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
day12的作业优化版,对代码进行更多的封装,且在添加新功能时主函数atm()可以不动
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:
"""
实现文件单行修改,一行一行读出内容,当账号配对之后,对此行内容repalce,结束循环,利用n计数,
再使用一个for循环,把后面的内容原封不动写入,range(n,len(lines))用来作为后续写入的条件
"""
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 "提现成功"
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("请输入您要转账的用户名:").strip()
gold = input("请输入转账的金额:").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 == '提现成功' and res2 == '充值成功':
print("转账成功")
else:
print("转账失败")
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("密码错误")
break
else:
print("账号不存在")
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("请输入您提现的金额:").strip()
old,new = reduce_money(username,gold)
res = modify(username, '3', old, new)
print(res)
func_dic = {
'1':[recharge,'充值'],
'2':[trans,'转账'],
'3':[withdraw,'提现'],
'4':[check,'查询'],
}
def atm():
print("欢迎使用ATM机")
username = login()
while username:
print(f"欢迎{username}使用ATM机,请输入相应指令")
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()