• 练习题


    1.用户输入用户名和密码还有验证码. 

    用户可以有三次登录的机会. 但是验证码如果输入错误. 不计算在内.

    from random import randint
    user = 'chenweixian'
    pwd = '123'
    count = 1
    while count <= 3:
        Verify_code = ''
        for i in range(4):
            Verify_code += chr(randint(65, 90))
    
        In_UserName = input('please input you username:')
        In_PassWord = input('please input you password:')
        In_Verify_Code = input('input verify_code__%s__:'%Verify_code).upper()
        if In_Verify_Code != Verify_code:
            print('Verify_Code is fail !!!')
            continue
        if  In_UserName == user and In_PassWord == pwd:
            print('Login Successful !!! ')
            break
        else:
            print('Username or PassWord is fail,Please input again')
            count += 1
        print('You Only have %s change to login' % (4 - count))
    View Code

    简版购物车

    count1 = 1
    while count1 <= 3:
        Name_Input = input('请输入用户名:')
        Pwd_Input = input('请输入密码:')
        if Name_Input == 'alex' and Pwd_Input == '123':
            Money_Input = int(input('请输入你的工资:'))
            while 1 :
                print('******商品菜单********')
                for i in enumerate(goods,1):
                    print(i[0],i[1]['name'],i[1]['price'])
    
                num  = input('请输入你想要购买的商品的编号:')
                if num.upper() == 'Q':
                    print(dd)
                    print('购物车')
                    print('商品名称''	','价格''	','购买数量''	','总价')
                    for  el in dd:
                        print(el['name'],el['price'],el['count'],el['price']*el['count'])
                    break
                num = int(num)
                if num < 1 or num > len(goods):
                    print("您输入的商品不存在")
                    continue
    
                if goods[num-1]['price'] < Money_Input:
                    print(goods[num-1])
                    Money_Input -= goods[num-1]['price']
                    for  i in dd:
                       if i['name'] == goods[num-1]['name']:
                            i['count'] = i['count']+1
                            break
                    else:
                        dd.append({'name':goods[num-1]['name'],'price':goods[num-1]['price'],'count':1})
                else:
                    while 1 :
                        if goods[num - 1]['price'] > Money_Input:
                            hh = input('余额不足,请充值:Y/N')
                            if hh.lower() == 'y':
                                Money_Input += int(input('请输入你要充值的金额:'))
                            else:
                                print('余额不足,重新选择商品')
                                break
                        else:
                            Money_Input -= goods[num - 1]['price']
                            for i in dd:
                                if i['name'] == goods[num - 1]['name']:
                                    i['count'] += 1
                            else:
                                dd.append({'name': goods[num - 1]['name'], 'price': goods[num - 1]['price'], 'count': 1})
                                print(dd)
                                break
                print('%s购买成功,你的余额为%s' %(goods[num-1]['name'],Money_Input))
    
        else:
            if count1 == 3:
                print('你已经三次输入错误,退出系统')
            else:
                print('用户名或密码错误,请重新输入')
            count1 += 1
    View Code

    Hr

    '''HR⼈⼒资源管理.
    1. 菜单: ("查看员⼯信息","添加员⼯信息", "修改员⼯信息", "删除员⼯信息", "退出")
    2. 添加员⼯信息:
     ⽤户输入员⼯的基本信息(id, name, birthday, salary, time), 将员⼯信息写入到⽂件
    emp.db⽂件内
    3. 修改员⼯信息:
     显⽰所有员⼯信息. 然后让⽤户选择要修改的员⼯的id. 然后让⽤户输入员⼯的⼯
    资, 将员⼯的⼯资修改为⽤户输入的⼯资. 其余内容不做改动
    4. 删除员⼯信息:
     显⽰所有员⼯信息. 然后⽤户选择要删除的员⼯id, 根据⽤户输入的id删除该员⼯的
    全部信息
    5. 查看员⼯信息:
     显⽰出所有员⼯的基本信息.
     以上操作都需要围绕着emp.db来完成.
     扩展(升级题):
     ⽤户的每⼀次操作成功都要将⽤户执⾏的操作记录在emp.log⽂件中(查看员⼯信息除
    外). 例如:
     ⽤户选择"添加员⼯信息". 当添加动作执⾏完毕, 在emp.log中记录⼀句话: 管理员在
    xxxx-xx-xx hh:mm:ss时间执⾏了添加员⼯信息操作. 添加的员⼯信息为: xxxxxxxxxxxxx
     以此类推. 每次操作成功后都要记录信息. (查看员⼯信息除外)
     emp.db ⽂件中的内容格式⾃⼰定义. 这个没有要求. 但是要符合你⾃⼰的设计需求
    '''
    import time
    import os
    
    # 负责记录日志
    def emplog(content):
        f = open("emp.log", mode="a", encoding="utf-8")
        f.write(content + "
    ")
        f.close()
    
    def chakan():
        f = open("emp.db", mode="r", encoding="utf-8")
        print("工号	姓名	工资	生日")
        for line in f:
            d = eval(line.strip())
            # print("%s	%s	%s	%s" % (d['empno'], d['name'], d['salary'], d['birthday']))
            print(f"{d['empno']}	{d['name']}	{d['salary']}	{d['birthday']}	")
        print("员工信息显示完毕!")
    
    def tianjia():
        while 1:
            # (id, name, birthday, salary, time)
            empno = input("请输入员工的empno: ")
            f = open("emp.db", mode="r", encoding="utf-8")
            for line in f:
                d = eval(line.strip())
                if d['empno'] == empno:
                    break
            else:
                name = input("请输入员工的姓名:")
                birthday = input("请输入员工的生日:")
                salary = input("请输入员工的工资:")
                intime = time.strftime("%Y-%m-%d")
                dic = {"empno":empno, "name":name,"birthday":birthday, "salary":salary, "intime":intime}
                f = open("emp.db", mode="a", encoding="utf-8")
                f.write(str(dic)+"
    ")
                f.close()
                print("添加成功")
                emplog("管理员在%s添加了一个员工, 该员工信息为%s" % (time.strftime("%Y-%m-%d %H:%M:%S"), str(dic)))
                return # 添加成功
            f.close()
    
    
    def xiugai():
        chakan()  # 显示所有员工信息
        empno = input("请输入你要修改的员工的工号:")
        f = open("emp.db", mode="r", encoding="utf-8")
        for line in f:
            d = eval(line.strip())
            if d['empno'] == empno:
                break
        else:
            print("没有此员工")
            return
        f.close()
    
        salary = input("请输入该员工的工资")
        with open("emp.db", mode="r", encoding="utf-8") as f1, 
            open("emp.db_副本", mode="w", encoding="utf-8") as f2:
            for line in f1:
                d = eval(line.strip())
                if d['empno'] == empno:
                    d['salary'] = salary
                    emplog("管理员在%s修改了一个员工, 该员工信息为%s" % (time.strftime("%Y-%m-%d %H:%M:%S"), str(d)))
                f2.write(str(d) + "
    ")
        os.remove("emp.db")
        os.rename("emp.db_副本", "emp.db")
    
    
    
    def shanchu():
        chakan() # 显示所有员工信息
        empno = input("请输入你要删除的员工工号:")
        with open("emp.db", mode="r", encoding="utf-8") as f1, 
            open("emp.db_副本", mode="w", encoding="utf-8") as f2:
            for line in f1:
                d = eval(line.strip())
                if d['empno'] == empno:
                    emplog("管理员在%s删除了一个员工, 该员工信息为%s" % (time.strftime("%Y-%m-%d %H:%M:%S"), str(d)))
                    continue
                f2.write(str(d) + "
    ")
        os.remove("emp.db")
        os.rename("emp.db_副本", "emp.db")
    
    
    menu = ("查看员⼯信息","添加员⼯信息", "修改员⼯信息", "删除员⼯信息", "退出")
    while 1:
        for i in range(len(menu)):
            print(i+1, menu[i])
    
        num = input("请输入你要执行的菜单")
        if num == '1':
            chakan()
        elif num == "2":
            tianjia()
        elif num == "3":
            xiugai()
        elif num == "4":
            shanchu()
        elif num == '5':
            print("系统退出")
            exit()
        else:
            print("对不起没有此菜单")
    View Code

     TCP类型scoket 通信(可以验证粘包现象,包含通信循环,连接循环部分)

    import socket
    import subprocess
    
    server = socket.socket()
    ip_port = ('127.0.0.1',8080)
    server.bind(ip_port)
    server.listen(2)
    con,addr = server.accept()
    # print(addr)
    
    while 1 :
    
        client_cmd = con.recv(1024).decode('utf-8')
        # print('*****')
        sub = subprocess.Popen(
            client_cmd,
            shell=True,
            stderr=subprocess.PIPE,
            stdout=subprocess.PIPE,)
        # print('********')
        cmd_res = sub.stdout.read()
        print(type(cmd_res))
        con.sendall(cmd_res)
        print('结果长度>>>', len(cmd_res))
    服务端配置
    import socket
    client = socket.socket()
    ip_port = ('127.0.0.1',8080)
    client.connect(ip_port)
    while 1:
        client_cmd = client.send(input('请输入系统指令>>>').encode('utf-8'))
        cmd_result = client.recv(1024).decode('gbk')
        print(cmd_result)
    客户端配置

    进程池版的socket 并发聊天

    #Pool内的进程数默认是cpu核数,假设为4(查看方法os.cpu_count())
    #开启6个客户端,会发现2个客户端处于等待状态
    #在每个进程内查看pid,会发现pid使用为4个,即多个客户端公用4个进程
    from socket import *
    from multiprocessing import Pool
    import os
    
    server=socket(AF_INET,SOCK_STREAM)
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    def talk(conn):
        print('进程pid: %s' %os.getpid())
        while True:
            try:
                msg=conn.recv(1024)
                if not msg:break
                conn.send(msg.upper())
            except Exception:
                break
    
    if __name__ == '__main__':
        p=Pool(5)
        while True:
            print('ggggg')
            conn,*_=server.accept()
            print('bbbbb')
            p.apply_async(talk,args=(conn,))
            print('hhhhhh')
            # p.apply(talk,args=(conn,client_addr)) #同步的话,则同一时间只有一个客户端能访问
    服务器端
    from socket import *
    
    client=socket(AF_INET,SOCK_STREAM)
    client.connect(('127.0.0.1',8080))
    
    
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
    
        client.send(msg.encode('utf-8'))
        msg=client.recv(1024)
        print(msg.decode('utf-8'))
    客户端

    多线程实现socket

    import multiprocessing
    import threading
    
    import socket
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(('127.0.0.1',8080))
    s.listen(5)
    
    def action(conn):
        while True:
            data=conn.recv(1024)
            print(data)
            msg = input('服务端输入:') #在多线程里面可以使用input输入内容,那么就可以实现客户端和服务端的聊天了,多进程不能输入
            conn.send(bytes(msg,encoding='utf-8'))
    
    if __name__ == '__main__':
    
        while True:
            conn,addr=s.accept()
            p=threading.Thread(target=action,args=(conn,))
            p.start()
    
    tcp_server.py
    服务端
    import socket
    
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',8080))
    
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
    
        s.send(msg.encode('utf-8'))
        data=s.recv(1024)
        print(data)
    
    tcp_client.py
    客户端
  • 相关阅读:
    如何掌握所有的程序语言
    程序与证明
    卫星通信地面系统构成
    SCIP 环境搭建
    Homebrew install.sh
    macOS 内核之从 I/O Kit 电量管理开始
    matlab练习程序(空间椭圆拟合)
    多进程抢票加锁
    进程间数据传递
    队列用法
  • 原文地址:https://www.cnblogs.com/vivi0403/p/9973973.html
Copyright © 2020-2023  润新知