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) )