一、练习
1、编写认证程序,可以登陆成功不同的账号密码
db_info = [
['jason', '111'],
['jack', '222'],
['sunny', '333']
]
tag = True
while tag:
inp_name = input('请输入您的用户名:').strip()
inp_pwd = input('请输入您的密码:').strip()
for item in db_info:
if inp_name == item[0] and inp_pwd == item[1]:
print("%s登录成功!" % inp_name)
tag = False
break
else:
print("登录失败!")
2、账号密码输错3次则退出
db_info = [
['jason', '111'],
['jack', '222'],
['sunny', '333']
]
count = 0
while count < 3:
inp_name = input('请输入您的用户名:').strip()
inp_pwd = input('请输入您的密码:').strip()
for item in db_info:
if inp_name == item[0] and inp_pwd == item[1]:
print("%s登录成功!" % inp_name)
count = 3
break
else:
print("登录失败!")
count += 1
3、 简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
编译型语言:运行需要编译器翻译,一旦翻译的结果可以运行,那么下一次运行就不需要再翻译了(如:C,C++,Go等)
解释型语言:每一次运行都需要解释器进行翻译(如:python,shell)
4、执行 Python 脚本的两种方式是什么
(1)交互式环境:
每输入一行代码即可得到结果,适合用来调试程序
(2)脚本的方式:
在文件中写下代码,用python解释器来运行(打开文件识别代码,并运行得到结果)
5、Pyhton 单行注释和多行注释分别用什么?
单行注释:使用#
多行注释:三引号(""" """)或者(''' ''')
6、布尔值分别有什么?
True 和 False
PS:对于任何一个值,它都隐含了隐式的布尔值,
0, None, 空(空字符串、空列表、空字典等)对应的布尔值为False
其余均为True
7、声明变量注意事项有那些?
原则:先定义,后使用
注意事项:(1)变量名只能由字母、数字和下划线任意组合而成
(2)首字符不能使用数字
(3)变量名不能使用python语言的关键字:如int、 float、and 、True、 print等
8、如何查看变量在内存中的地址?
调用id()函数查看
如:
x = 100
print(id(x))
9、写代码
a. 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
inp_name = input("请输入用户名:").strip()
inp_pwd = input("请输入密码:").strip()
if inp_name == "seven" and inp_pwd == "123":
print("登录成功!")
else:
print("登录失败!")
b. 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
i = 0
while i < 3:
inp_name = input("请输入用户名:").strip()
inp_pwd = input("请输入密码:").strip()
if inp_name == "seven" and inp_pwd == "123":
print("登录成功!")
break
else:
print('登录失败!')
i += 1
c. 实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
i = 0
while i < 3:
inp_name = input("请输入用户名:").strip()
inp_pwd = input("请输入密码:").strip()
if (inp_name == "seven" or inp_name == "alex") and inp_pwd == "123":
print("登录成功!")
break
else:
print('登录失败!')
i += 1
10、写代码
a. 使用while循环实现输出2-3+4-5+6…+100 的和
num = 0
for i in range(2, 100, 1):
if i % 2 == 0:
num += i
else:
num -= i
print(num)
b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12
count = 1
while count < 13:
if count == 6 or count == 10:
count += 1
continue
elif count == 12:
print(count)
break
print(count, end=",")
count += 1
c. 使用 while 循环实现输出 1-100 内的所有奇数
i = 1
while i < 101:
if i % 2 == 1:
print(i, end=' ')
i += 1
d. 使用 while 循环实现输出 1-100 内的所有偶数
i = 1
while i < 101:
if i % 2 == 0:
print(i, end=' ')
i += 1
11、现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123456
n2 = n1
n1 与 n2 都指向值123456的内存地址,
但是对n1或者n2作运算、赋值操作都不影响另一个值
二 、作业
a. 基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
user_info = {
'jason': {'pwd': '111', 'count': 0},
'tom': {'pwd': '222', 'count': 0},
'jay': {'pwd': '333', 'count': 0}
}
while True:
inp_name = input('请输入用户名:').strip()
if not inp_name in user_info:
print('用户名不存在,请重新输入')
continue
if user_info[inp_name]['count'] > 2:
print("您已输错三次,请明天再试")
break
else:
inp_pwd = input('请输入密码:').strip()
if inp_pwd == user_info[inp_name]['pwd']:
print('登录成功!')
break
else:
print('密码错误')
user_info[inp_name]['count'] += 1
b. 升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
user_info = {
'jason': {'pwd': '111', 'count': 0},
'tom': {'pwd': '222', 'count': 0},
'jay': {'pwd': '333', 'count': 0}
}
while True:
inp_name = input('请输入用户名:').strip()
if not inp_name in user_info:
print('用户名不存在,请重新输入')
continue
with open('lock.txt', mode='r', encoding='utf-8') as f1:
names = f1.read().strip(' ').split('\n')
if inp_name in names:
print("当前用户因输错三次,已经被系统锁定")
if user_info[inp_name]['count'] > 2:
with open('lock.txt', mode='a', encoding='utf-8') as f2:
print("您已输错三次,请明天再试")
f2.write(inp_name)
break
else:
inp_pwd = input('请输入密码:').strip()
if inp_pwd == user_info[inp_name]['pwd']:
print('登录成功!')
break
else:
print('密码错误')
user_info[inp_name]['count'] += 1