• 登录


    
    
    import hashlib
    def md5(username,password):  # 可复用  多次用
        md5_obj = hashlib.md5(username[::-1].encode('utf-8'))#翻转盐
        md5_obj.update(password.encode('utf-8'))
        return md5_obj.hexdigest()
    def get_line():   #可复用
        with open('userinfo', encoding='utf-8',mode='r') as f:
            for line in f:
                user, pwd = line.strip().split(',')
                yield user,pwd
    def register():
        flag = True
        while flag:
            user1 = input('user: ')
            pwd1 = input('pwd: ')
            for user,pwd in get_line():
                if user == user1:
                    print('你输入的用户名已经存在!')
                    break
            else:
                flag = False
        pwd1 = md5(user1,pwd1)
        with open('userinfo', encoding='utf-8',mode='a') as f:
            f.write('%s,%s
    '%(user1,pwd1))
    def login():
        register()
        user2 = input('user: ')
        pwd2 = input('pwd: ')
        for user, pwd in get_line():
            if user == user2 and pwd == md5(user2,pwd2):
                return True
    ret = login()
    if ret:
        print('登陆成功')
     

    计算器

    import re           # 引用正则
    def mul_div(exp):   # 乘法 和 除法
        '''
        计算最简单的两个数之间的乘除法
        :param exp: str数据类型的 两个数的乘除法表达式,例如'2.34*3.21'
        :return: str数据类型的计算结果
        '''
        if '*' in exp:       # 判断‘*’是否 在其中
            a,b = exp.split('*')    #乘号两边相乘
            return str(float(a)*float(b))  #计算两个的乘积 字符串方便之后替换
        else:           #
            a, b = exp.split('/')  # 判断除
            return str(float(a) / float(b))     # 计算除法
    
    def format_exp(exp):        # 该算法运算符的格式
        '''
        完成表达式格式整理,将一些叠在一起的符号整理成一个符号
        :param exp: str数据类型的表达式 '1.23++3+-4--5'
        :return: 整理之后的str数据类型的字符串,'1.23+3-4+5'
        '''
        exp = exp.replace('++','+')     # ++  的 +
        exp = exp.replace('-+','-')     # +-  的-
        exp = exp.replace('+-','-')     # -+  的+
        exp = exp.replace('--','+')     #--   的+
        return exp              #返回 字符
    
    def cal_no_bracket(no_bracket_exp):   #  计算器没有括号的函数  形参没有括号的例子
        '''
        计算内部不再有其他小括号的表达式
        :param no_bracket_exp:字符串数据类型的,内部不再含有其他小括号的表达式,例如:(9-2*5/3+7/3*99/4*2998+10*568/14)
        :return: float数据类型的结果
        '''
        # 再计算乘除法
        while True:     # 循环
            mul_dic_exp = re.search('d+(.d+)?[*/]-?d+(.d+)?', no_bracket_exp) #判断传入的第一个括号   # 前面没有符号是这样3-2*-3替代是3-(-6)=9而不是3(6)=36
            if mul_dic_exp:                    #如果括号里的东西不为空
                md_exp = mul_dic_exp.group()    # 结果集的东西给了新变量
                res = mul_div(md_exp)           #去mul里去乘
                no_bracket_exp = no_bracket_exp.replace(md_exp, res)    #替换
            else:break                  #没有则跳出
        # 表达式中的符号管理,把++ 编程+ ,--变成+
        no_bracket_exp = format_exp(no_bracket_exp)     # 格式化符号
        # 再计算加减法
        res_lst = re.findall('[-+]?d+(?:.d+)?',no_bracket_exp)   #判断加法  前面没有的用问号
        sum_n = 0           # 加入变量sum
        for i in res_lst:       #循环出 每个元素
            sum_n += float(i)   #把各个数加起来
        return sum_n            #返回 和变量
    
    def remove_bracket(exp):        #删除 括号把括号里的都得出值来 给一个值
        '''
        将表达式中所有的括号都计算出结果,替换原有的表达式,直到这个表达式内不再含有括号
        :param exp:str类型带着括号的表达式'1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))'
        :return:str类型的不带括号的表达式'1-2*-1388335.8476190479'
        '''
        # 先计算括号内的
        while True:         #循环
            ret = re.search('([^()]+)', exp)  #1-2*5   匹配出括号里的并付给一个值
            if ret:             #如果有 则执行下
                no_bracket_exp = ret.group()  # (9-2*5/3+7/3*99/4*2998+10*568/14)    #结果集返回给  不要括号的
                res = cal_no_bracket(no_bracket_exp)  # (9-2*5/3+7/3*99/4*2998+10*568/14)   #在计算没括号里计算并给一个变量
                exp = exp.replace(no_bracket_exp,str(res))  #替换变量
            else:break      #退出循环
        return exp          #返回值
    
    def calculator(exp):        #计算器函数
        '''
        处理原始表达式格式,去掉括号并且进行最后一步计算
        :param exp:原始的字符串格式的表达式
        :return:float类型的结果
        '''
        exp = exp.replace(' ','')       #把空格 去除
        ret = remove_bracket(exp)       #计算括号里的值 给新变量
        return cal_no_bracket(ret)      #在计算器没有括号里计算
    
    exp = '1 - 2 * ( (60-30 + (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )*(-40/5)) - (-4*3)/ (16-3*2) )' #变量
    res = calculator(exp)       # 计算器 变量
    print(res,type(res))        #打印
  • 相关阅读:
    sublime text2 中Emmet常用的技巧 和快捷键
    JS 常用函数
    javascript 事件模型 及 event对象属性总结
    Plant Ecology Journal Club 分享主题和文献列表, 1-7, 2018年秋
    Perl FASTA文件拆分合并
    筛选特定ID的条目信息
    计算可塑性指数RDPI
    【文献摘抄】2018年9月
    重金属在超富集植物与作物间作系统中的植物吸收和富集
    【R统计】主成分分析2——主成分回归
  • 原文地址:https://www.cnblogs.com/Doner/p/10623216.html
Copyright © 2020-2023  润新知