补充内容:
eval 将字符串变成变量名
locals 看输入的是否是字典中的一个key
func.__name____怎么看变量名的数据类型
斐波那契数列
li=[1,1]
while li[-1]<1000000:
li.append(li[-1]+li[-2])
print(li)
li=[1,1]
while len(li)<50:
li.append(li[-1]+li[-2])
print(li)
最后两个数相加变成下个数,判断什么时候停下来
员工信息系统编译思路
在编译程序之前,先将用户的需求考虑清楚,然后开始判断从哪方面先入手。
因为函数装饰器比较好写,并且大体都要用在装饰函数上,所以决定最后搞定。
先编写了一个界面,方便用户操作,让用户根据界面上的操作提醒来进行操作。
大致的编写思路就是讲功能列出,然后添加一个退出,用来代表程序的全部功能和结束。用input来进行用户的指令输入
写完界面之后就可以注释了,方便接下来的编译
先进行查询功能的编译。写了一个函数首先要想到的就是从文件中取出数据来,
这样,我就先将文件打开然后取出数据,然后根据用户需求的公式,来进行用户指令的获取,
根据用户的指令,将得到的数据进行判断,比如当*和job是否在数据中时才进行下一项程序,将数据取出之后判断是否与查询条件相符合,然后输出查询结果。
这部分代码编写时主要的难度就是用户指令中真正意图和关键字的获取,还有利用关键字对数据进行判断,要思考怎样才能取出用户需要的数据。
根据用户的需求,一共有三种语法,那么久进行逐一编写,全部拿来与取出的数据进行对比,在这里用的方法是如果用户查询的数据在数据line里面就取出这一条line
接下来开始写创建
在写创建之前也是先要打开文件,这时候要想的是创建新数据的话,肯定就是文件操作中的追加。然后根据这个思路进行编写
难点在于添加数据时候要按照编号,我的方法是令i初始值为,然后每次循环line数据,就令i+1并且将这个i添加到列表li中,然后最后取出列表的最后一个值,也就是上一条数据的值了,然后将他+1就是下一条数据的ID
有个困难就是追加的话是不带换行的,直接在上一条数据后面进行添加,所以每次添加都要在前面加一个\n,然而在删除数据的时候,这种方法的弊端也出现了
因为每次删除数据是不会删除\n的,所以每次添加数据都会多隔一行,然后获取数据的ID是根据行来判断数字的,这样数字就会发生混乱。发生了这个bug之后开始思考解决办法。
最后的解决办法是加一个判断,如果上一条数据中没有\n的话就添加\n,也就是说第一次添加的时候会有一个\n吓一跳数据添加时候如果上一行里面有\n也就是删除数据没有删去的\n就不添加\n的话就添加\n,也就是说第一次添加的时候会有一个\n吓一跳数据添加时候如果上一行里面有\n也就是删除数据没有删去的\n就不添加\n
解决了问题
然后就是删除数据
删除员工信息用户的需求是按员工信息的ID,这样的话就要将重心放在信息的首位,也就是ID上,所以每次循环信息的时候,倒要取这列数据的头一个数据,也就是ID来进行判断
我的方法是取出数据之后如果和用户输入的需求ID相同,那就删除他,然后重新写一个文件,上述方法也是一样,每次修改了数据,除了创建和查询,都是要在结尾将这个文件删除,重新创建一个同名文件进行更新
当然,一个文件更新完了,改名成修改数据的文件,那么这个文件就不存在,下次操作就会报错。所以在结尾又会添加一个相同的文件,预备下次操作的更新
最后一个写的修改,同样,也是读文件拿出 数据,然后判断用户输入的条件是否在这列数据中,如果在的话就可以用,用字符串修改方法,将用户条件替换旧的信息。
同样创建新文件改名,移除旧的,编译完成。
最后就是编译器了,用语法糖每个都添加,然后写登录程序,利用改变全局变量的方法,就可以完成用户需求。
f = open(‘用户登录‘,‘r‘,encoding=‘utf-8‘)
m = f.read() //获取文件中用户信息
f.close()
a,b = m.split(‘\n‘) //用户名和密码分割
flag=1
def yanzheng(func):
def inner(*args,**kwargs):
global flag //声明改变全局变量
if flag==1: //第一次进来全局变量为1
while True:
n =input(‘请输入用户名‘)
if n ==a:
while True:
z = input(‘请输入密码‘)
if z == b:
print(‘验证成功‘)
func(*args, **kwargs)
flag =2 //验证成功的话全局变量变成2
break
else:
print(‘密码错误‘)
break
else:
print(‘用户名错误‘)
else:
func(*args, **kwargs) //全局变量变成2,这样第二次往后的判断就会直接走else
return inner
@yanzheng
def jisuan():
for i in range(0,10):
print(i)
@yanzheng
def shuchu():
print(‘老板‘)
jisuan()
shuchu()
利用全局变量的特点,global修改全局变量下次再进来的时候全局变量已经变了,函数中添加全局变量的判断
然后根据条件来判断是否需要再次进行登录程序。