7–5. userpw2.py. 下面的问题和例题 7.1 中管理名字-密码的键值对数据的程序有关。
(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用 time 模块),并与用户密码一起
保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,
在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不
超过 4 个小时,则通知该用户: “You already logged in at: <last_ login_timestamp>.”
(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名
字和他们的密码的清单。
(e) 要求用户名不区分大小写。
(g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录,
7-8.
人力资源。创建一个简单的雇员姓名和编号的程序。让用户输入一组雇员姓名和编号。
你的程序可以提供按照姓名排序输出的功能,雇员姓名显示在前面,后面是对应的雇员编号。附加
题:添加一项功能,按照雇员编号的顺序输出数据。
(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用 time 模块),并与用户密码一起
保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,
在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不
超过 4 个小时,则通知该用户: “You already logged in at: <last_ login_timestamp>.”
(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名
字和他们的密码的清单。
(e) 要求用户名不区分大小写。
(g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录,
询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登录。
#!/usr/bin/env python
#coding=utf-8
import getpass
import time
db = {}
db1 = {}
def newuser():
prompt = '\n\n建立账户名:'
while True:
name = raw_input(prompt).lower()
if db.has_key(name):
prompt = '账户已经存在,请建立别的账户'
continue
else :
break
pwd = getpass.getpass('密码:')
db1[name] = time.time()
db[name] = pwd
def olduser():
name = raw_input('\n\n帐号:').lower()
pwd = getpass.getpass('密码:')
passwd = db.get(name)
if passwd == pwd :
print '\n登陆成功',name
if time.time()-14400 < db1[name]:
print '上次登陆时间为:',time.ctime(db1[name])
db1[name] = time.time()
else :
print '密码错误,登录失败'
if name not in db.keys():
build = raw_input('该用户不存在,是否建立?(y/n)').strip()[0].lower()
if build not in 'yn':
print '您的输入有误,请重新输入'
elif build == 'y':
pwd = getpass.getpass('请输入密码:')
db1[name] = time.time()
db[name] = pwd
else:
pass
def removeuser():
name = raw_input('\n\n请输入要删除的账户名:').lower
db1.pop(db[name])
db.pop(name)
print '删除成功!'
def showall():
print "\n\n帐号\t: 密码\t"
print '*'*16
for i in db:
print "%s\t: %s\t" %(i,db[i])
def showmenu():
prompt = """
---------------------------
| (N) 创建新账户 |
| (E) 现有用户登录 |
| (R) 删除用户 |
| (S) 显示所有账户密码 |
| (Q) 退出 |
---------------------------
Enter choice:"""
done = False
while not done:
chosen = False
while not chosen:
try:
choice = raw_input(prompt).strip()[0].lower()
except (EOFError,KeyboardInterrupt):
choice = 'q'
print '\n您的选择是:[%s]' %choice
if choice not in 'sneqr':
print '您的输入有误,请重新输入!'
elif choice == 'q':
chosen = True
done = True
elif choice == 'n':
newuser()
elif choice == 'e':
olduser()
elif choice == 'r':
removeuser()
elif choice == 's':
showall()
if __name__ == '__main__':
showmenu()
7-8.
人力资源。创建一个简单的雇员姓名和编号的程序。让用户输入一组雇员姓名和编号。
你的程序可以提供按照姓名排序输出的功能,雇员姓名显示在前面,后面是对应的雇员编号。附加
题:添加一项功能,按照雇员编号的顺序输出数据。
#!/usr/bin/env python
#coding=utf-8
a = {}
##输入模块##
print "您可以依次输入姓名与其对应的编号,输入'.'退出"
while 1:
b = raw_input("请输入姓名:")
if b == '.' :
print '结束输入.'
break
c = raw_input("请输入编号:")
if c == '.' :
print '结束输入.'
break
a.setdefault(b,c)
##输出模块##
print '请选择输出方式:\n\t 1 --------- 按姓名排序输出\n\t 2 --------- 按编号排序输出'
while 1:
d = raw_input()
if int(d) == 1:
print "姓名\t: 编号\t"
for i in sorted(a):
print "%s\t: %s\t" %(i,a[i])
break
elif int(d) == 2:
print "姓名\t: 编号\t"
dic = dict( sorted(a.items(),key = lambda items:items[1]))
for i in dic:
print "%s\t: %s\t" %(i,dic[i])
break
else:
pass
文本处理. 要求输入一个姓名列表,输入格式是“Last Name, First Name,” 即 姓,
逗号, 名. 编写程序处理输入, 如果用户输入错误, 比如“First Name Last Name,” , 请纠正这
些错误, 并通知用户. 同时你还需要记录输入错误次数. 当用户输入结束后, 给列表排序, 然后以
"姓 , 名" 的顺序显示.
#!/usr/bin/env python
#coding=utf-8
a = []
count = input("您要输入几组姓名:")
print "请依次输入%d组姓名,按如下格式:\n\t姓,名\n" %(count)
i = 0
j = 0
while 1:
if i == count :
break
else :
name = raw_input("请输入姓名:")
if "," not in name or "," == name[0] or "," == name[-1] or name.count(',') != 1:
print "您的输入有误,请按照正确格式重新输入。"
j += 1
else :
i += 1
a.append(name)
print "输入成功!"
a.sort()
print "\n您输错了%d次\n" %(j)
print "最终输入结果为:"
for i in range(0,count):
print a[i]