python闯关_Day02

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

  

  

 

posted on 2019-01-09 00:24  NetDevOps  阅读(158)  评论(0编辑  收藏  举报

导航