Q1:写一个用户循环猜年龄的游戏,猜对就退出,猜不对就继续猜,猜三次,提示用户是否继续,用户回答Y或者y就继续猜,三次之后再重复,回答N或n就结束游戏。
#! /usr/bin/env python
#-*- coding:utf-8 -*-
#猜年龄
import random
age = random.randint(1,10)
print (age)
iscontinue = 1
while iscontinue:
for i in range(3):
guess = int(input("请猜数:"))
if guess == age:
print('猜对了。')
iscontinue = 0
break
else:
print('猜错了')
if iscontinue == 0:
break
strContinue = input('还继续吗?(y/n)')
if strContinue == 'y' or strContinue == 'Y':
iscontinue = 1
elif strContinue == 'n' or strContinue == 'N':
iscontinue = 0
else:
print ('输入错误,退出')
注意
1. input 返回的是str,需要强制转换成int
2. break只能跳出一层,如果要连续跳出,需要在外层做一道判断
3. 判断用户输入的处理,不简洁,打算用regex来实现,没有时间再查了。
Q2:写一个用户认证程序,有三组用户名和密码,每当任意一个用户密码输入错误三次则对该用户进行限制登录
#! /usr/bin/env python
#-*- coding:utf-8 -*-
"""
u1:p1
u2:p2
u3:p3
"""
auth = {'u1':'p1','u2':'p2','u3':'p3'}
auth_lock = {'u1':0,'u2':0,'u3':0}
while True:
uname = input('请输入用户名:')
if auth_lock[uname] == 1:
print(uname,'已经被锁定(连续输错3次密码)。')
break
au_times = 1
while au_times <= 3:
upass = input('请输入密码:')
if upass != auth[uname]:
print ('用户名密码错误(', au_times, ')。')
au_times += 1
if au_times > 3:
auth_lock[uname] = 1
break
else:
print ('认证通过。')
au_times = 0
break
if au_times == 0:
break
注:
1. 用了2个字典,一个字典用于存储用户名密码,另一个字典用来保存对应的用户名是否被锁。
2. 不健壮,没有对输入进行校验,如果输入了非key,则会报"keyerror",有对应的解决办法。待后面补充。
Q3 打印乘法小九九代码
for i in range(1,10):
for j in range(1,10):
print("%d*%d=%2d" % (i,j,i*j),end=" ")
print("-")
Q4 打印金字塔图形
for i in range(20):
print(' ' * (20-i-1) + '*' * (2*i+1) )