python练习——小程序

1、打印0-10(while/for)

count = 0
while count < 11:
    print(count)
    count += 1

for i in range(11):
    print(i)

2、求1-100所有数的和

a = 1
sum = 0
while a < 101:
    sum += a
    # print(sum)
    a += 1
print(sum)

3、打印1-100之间的偶数

for n in range(1,101):
     if n % 2 == 0:
         print(n)

4、打印1-100之间的奇数

 for n in range(1,101):
     if n % 2 == 1:
         print(n)

5、求1-2+3-4+5......+99的和

count = 1
s1 = 0
s2 = 0
while count < 100:
    if count % 2 == 0:
        s1 += -count
    else:
        s2 += count
    count += 1
s = s1 + s2
print(s)

6、用户登录(三次机会重试)

# 任意用户输入错误三次即退出程序
Name = 'shj'
Pwd = '123'
count = 0
while count < 3:
    name = input("please input your name:")
    pwd = input("please input your password:")
    if name == Name and pwd == Pwd:
        print("\033[32mlogin successful..\033[0m")
        break
    else:
        print("Invalid username and password..")
    count += 1



# 同一用户输入错误三次即退出程序

info = {
    'shj':'123',
    'xxn':'456',
    'xka':'aaa'
}
l = []
while True:
    name = input("please input your name:")
    pwd = input("please input your password:")
    if name not in info:
        print("\033[31m您输入的用户不存在。\033[0m")
        l.append(name)
        if l.count(name)>2:
            print("\033[31m您已尝试太多次,程序退出\033[0m")
            break
    else:
        if pwd == info[name]:
            print("\033[32mlogin successful..\033[0m")
            break
        else:
            l.append(name)
            if l.count(name) > 2:
                print("\033[31m密码输入次数过多,程序退出。。\033[0m")
                break

7、猜年龄游戏

要求:
    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出

age_of_shj = 23
count = 0
while count < 3:
    guess_age = int(input("输入你猜的数:"))
    if guess_age == age_of_shj:
        print("\033[32m恭喜你猜对了!\033[0m")
        break
    elif guess_age < age_of_shj:
        print("太小了,往大了猜。")
    else:
        print("太大了,往小了猜。")
    count += 1
else:
    print("\033[31m你尝试太多次了,程序退出!\033[0m")

8、猜年龄游戏升级版

要求:
    允许用户最多尝试3次
    每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
    如何猜对了,就直接退出

age_of_shj = 23
count = 0
while count < 3:
    guess_age = int(input("输入你猜的数:"))
    if guess_age == age_of_shj:
        print("\033[32m恭喜你猜对了!\033[0m")
        break
    elif guess_age < age_of_shj:
        print("太小了,往大了猜。")
    else:
        print("太大了,往小了猜。")
    count += 1
    if count == 3:
        ask = input("Do you want to continue?(y/n)")
        if ask in ['Y','y']:
            count = 0
        elif ask in ['N','n']:
            break
        else:
            print("您的输入有误,请重新输入")

9、打印九九乘法表

for i in range(1,10):
    for j in range(i):
        j += 1
        print("%s * %s = %s"%(i,j,i*j),end="\t")
    print()

10、打印金字塔

'''
    *     空格=4,*=1
   ***    空格=3,*=3
  *****   空格=2,*=5
 *******  空格=1,*=7
********* 空格=0,*=9
'''
level = int(input('请输入金字塔高度:'))
for num in range(level):
    print(" "*(level-num-1),end="")
    print("*"*(num*2-1))
第二种方法:
    用字符串的center方法


level = int(input('请输入金字塔高度:'))
for i in range(1,level+1):
    print(('*'*(2*i-1)).center((2*level-1),' '))

11、统计元组中所有数据属于字符串的个数

# 数据:t1 = (1, 2, '3', '4', 5, '6')
# 结果:3
t1 = (1, 2, '3', '4', 5, '6')
count = []
for t in t1:
    if isinstance(t,str):
        count.append(t)
print(len(count))

12、将以下数据存储为字典类型

数据:info = "name:Owen|age:18|gender:男"
结果:{'name': 'Owen', 'age': 18, 'gender': '男'}
注:年龄存储为数字类型

info = "name:Owen|age:18|gender:男"
l = info.split("|")
l1 = []
for l2 in l:
    s = l2.split(":")
    l1.append(s)
dic = dict(l1)
dic['age']=18
print(dic)

13、完成数据的去重

数据:t3 = (1, 2, 1, 2, 3, 5, 9)
结果:t3 = (1, 2, 3, 5, 9)
注:从不考虑顺序、考虑顺序两方面完成
t3 = (1, 2, 1, 2, 3, 5, 9)

# 不考虑顺序
t3 = set(t3)
t3 = tuple(t3)
print(t3)

# 考虑顺序
l = []
for t in t3:
    if t not in l:
        l.append(t)
l.sort()
print(tuple(l))

14、计算元组中所有可以转换为数字的数据的总和

数据:t4 = (10, 'abc', '100', '3')
运算结果:113

t4 = (10, 'abc', '100', '3')
s = 0
for t in t4:
    if isinstance(t,int):
        s += t
    elif t.isdigit():
        s += int(t)
print(s)

15、计算元组中所有可以转换为数字的数据的总和

数据:t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,))
运算结果:11118
提示:
  -- 利用字符串isnumeric()判断汉字
  -- 利用字典{'壹': 1 ...}将汉字转换为数字
  -- 利用isinstance()将list和tuple中数据取出来
  -- 先将所有转化为数字的数据存放在一个单列集合中,在做运算

t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,))
change = str.maketrans('壹肆','14')
s = 0
for t in t4:
    if isinstance(t,int):
        s += t
    elif isinstance(t,list):
        s += t[0]
    elif isinstance(t,tuple):
        s += t[0]
    elif t.isdigit():
        s += int(t)
    elif t in ['壹','肆']:
        s += int(t.translate(change))
print(s)

16、完成录入电话本

需求:

-- 从键盘中录入姓名(不区分大小写):
   -- 姓名必须是全英文组成,不是则重新录入姓名,如果是q,代表退出    #str.isalpha():True if 只包含字母
-- 从键盘中再录入电话:
   -- 电话必须为数字且长度必须是11位(不能转换为数字)   #str.isdigit(): True if 只包含数字
-- 如果出现姓名相同,则保留最后一次电话号码
-- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成
   -- {
       'O': {
          'Owen': '13355667788'
       }
   }

最终数据,分组名一定大写:
{
    'E': {
      'egon': '17788990000',
      'engo': '16633445566'
    },
    'O': {
       'Owen': '13355667788'
    }
}
# 电话本
phone_map = {}
# 是否退出系统
is_over = False
while not is_over:
    # 姓名初始制空,完成只有姓名输入正确才录入电话
    name = ''
    while True:
        # 姓名必须录入正确
        if not name:
            name = input("name:")
            if name == 'q':
                # 退出系统
                is_over = True
                break
            elif not name.isalpha():
                # 录入错误,置空名字
                print('name error')
                name = ''
                continue
        # 录入电话,保证是11位的数字字符串
        phone = input("phone:")
        if not (phone.isdigit() and len(phone) == 11):
            continue

        # 取组名
        group = name[0:1].upper()
        # 对于组名的操作:无组名,添加分组 | 有组名,不操作
        phone_map.setdefault(group, {})
        phone_map[group][name] = phone
        # 一条信息添加完毕,重置信息
        name = ''
        phone = ''
        print('录入成功')
print(phone_map)

17、完成登录注册系统(从空文件开始做)

需求:

1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出其他,其他输入代表输入有误,重输
2.用户的账号密码信息存放在usr.txt文件中,保证用户注册成功后,重启系统,用户信息仍然保存
3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败自动退出系统
4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息
c = 0
f = open('usr.txt','r+',encoding='utf-8')
data = f.read()
dic = {}
if data != '':
    data1 = data.split('|')
    for msg in data1:
        k,v = msg.split(':')
        dic[k] = v
tag = True
while tag:
    print('''
        0 退出
        1 登录
        2 注册
    ''')
    choice = input("请输入您要进行的操作:").strip()
    if choice == '0':
        tag = False
    elif choice == '1':
        while tag:
            name = input("username:").strip()
            if name not in dic :
                if c==2:
                    print("此用户不存在,请注册")
                    while tag:
                        name = input("请设置账户名:").strip()
                        pwd = input("请设置密码:").strip()
                        if data == '':
                            f.write(name + ':' + pwd)
                        else:
                            f.write('|'+name+':'+pwd)
                        print("注册成功")
                        tag = False
                else:
                    print('未注册!')
                    c += 1
            else:
                count = 0
                while count < 3:
                    pwd = input("password:").strip()
                    if pwd == dic[k]:
                        print("登录成功")
                        break
                    else:
                        print("密码错误")
                        count += 1
                        if count == 2:
                            tag = False
                tag =False
    elif choice == '2':
        while tag:
            name = input("请设置账户名:").strip()
            pwd = input("请设置密码:").strip()
            if name in dic:
                print("用户名已存在,注册失败")
                continue
            else:
                if data == '':
                    f.write(name+':'+pwd)
                else:
                    f.write('|'+name+':'+pwd)
                print("注册成功")
                tag = False
    else:
        print("输入有误,请重新输入")
f.close()

18、用函数改造上题的代码

# 获取文件中用户信息
def get_usr_map():
    global dic,data,f,k
    with open('user.txt','r+',encoding='utf-8') as f:
        data = f.read()
        dic = {}
        if data != '':
            data1 = data.split('|')
            for msg in data1:
                k,v = msg.split(':')
                dic[k] = v


# 注册
def register():
    print('注册页面')
    get_usr_map()
    while True:
        name = input("请设置账户名:").strip()
        pwd = input("请设置密码:").strip()
        if name in dic:
            print("用户名已存在,注册失败")
            continue
        else:
            f = open('user.txt','a+',encoding='utf-8')
            if data == '':
                f.write(name + ':' + pwd)
            else:
                f.write('|' + name + ':' + pwd)
            print("注册成功")
            f.close()
            break


# 登录
def login():
    print('登录页面')
    get_usr_map()
    c = 0
    while True:
        name = input("username:").strip()
        if name not in dic:
            if c == 2:
                print("此用户不存在,请注册!")
                register()
                break
            else:
                print("当前用户未注册!")
                c += 1
        else:
            count = 0
            while count < 3:
                pwd = input("password:").strip()
                if pwd == dic[k]:
                    print("登录成功")
                    break
                else:
                    print("密码错误")
                    if count == 2:
                        break
                    count += 1
            break


# 启动系统
def start():
    print("系统启动!")
    while True:
        tag = input("""请输入操作指令:
0:退出
1:登录
2:注册    
>>>: """)
        if tag.isdigit():
            tag = int(tag)
        if tag == 0:
            break
        elif tag == 1:
            login()
            break
        elif tag == 2:
            register()
            break
        else:
            print("输入有误,请重新输入")


# 启动系统(入口)
start()

猜你喜欢

转载自blog.csdn.net/weixin_40406241/article/details/88725178
今日推荐