zoukankan      html  css  js  c++  java
  • python3的数据类型转换问题

    问题描述:在自我学习的过程中,写了个登陆,在input处,希望能够对数据类型进行判断,但是因为python3的输入的数据会被系统默认为字符串,也就是1,1.2,a。都会被系统默认为字符串,这个心塞啊,难受啊。我不接受强制类型转换,先贴代码,供大家参考,希望大神能够给出优化代码。多谢

      ps:来自某小白的问题

    #!/user/bin/env python
    #coding:utf-8
    
    #Author:shenqiang
    import json
    
    '''分离用户名输入和密码输入的函数'''
    def infoUsername():
        '''
        输入用户名
        :return: username  用户名
        '''
        username = input('请输入您注册的用户名:
    ')
        return username
    
    def infoPassword():
        '''
        输入密码
        :return:password 密码
        '''
        password = input('请输入您注册的密码:
    ')
        return password
    
    '''
    注册
    '''
    def register(username,password):
        '''
        注册
        :parameter: username 用户名
        :parameter:password 密码
        :return:
        '''
        temp = username+'|'+password
        '''改写,序列化和反序列化'''
        json.dump(temp,open('login', 'w'))
        # f = open('login','w')
        # f.write(temp)
        print('恭喜{0},注册成功!'.format(username))
    
    '''
    1。模拟登陆
    2。模拟登陆成功后,用户现实登陆状态
    3。模拟注册
    '''
    def login(username,password):
        '''
        登陆
        :param username:登陆系统的账号
        :param password:登陆系统的账号的密码
        :return: True:登陆成功 False:登陆失败
        '''
        # f = open('login','r')
    
        '''改写,序列化和反序列化'''
        f = str(json.load(open('login','r')))
        list1 = f.split('|')
        if list1[0] == username and list1[1] == password:
            return True
        else:
            return False
    
        # for line in f:
        #     # 将字符串转化成列表
        #     list = line.split('|')
        #     if list[0] == username and list[1] == password:
        #         return True
        #     else:
        #         return False
    
    
    '''
    查询用户信息
    '''
    def info(username,password):
        '''拿到文件的用户名和密码'''
    
        # lines = open('login','r')
        # for line in lines:
        #     list1 = line.split('|')
    
        '''改写,序列化和反序列化'''
        f = str(json.load(open('login', 'r')))
        list1 = f.split('|')
        '''验证用户等登陆是否成功'''
        r = login(username,password)
        if r:
            print('登陆成功!用户昵称为:{0}'.format(list1[0]))
        else:
            print('登陆失败!请检查您的账号和密码!')
    
    '''
    退出系统
    '''
    def exit():
        '''退出系统'''
        import sys
        sys.exit(1)
        print('您已退出该系统!')
    
    '''
    主函数
    '''
    def main():
        '''调用上面的方法和属性'''
        while True:
            try:
                # t = int(input('1。注册;2。登陆;3。退出登陆 
    '))
                t = int(input('1。注册;2。登陆;3。退出登陆 
    '))
                '''
                python3输入的整型,浮点型,字符串。都是被系统默认是字符串.下面代码失效
                '''
                print(type(t))
                if isinstance(t,float):
                    t = int(t)
                if isinstance(t,str):
                        if len(t)==1:
                            t = ord(t)
            except Exception as e:
                print(e.args)
            else:
                if t == 1:
                    username = infoUsername()
                    password = infoPassword()
                    register(username,password)
                elif t == 2:
                    username = infoUsername()
                    password = infoPassword()
                    login(username,password)
                    info(username,password)
                elif t == 3:
                    exit()
                else:
                    print('输入错误,请重新输入!')
            finally:
                print('')
    
    if __name__ == '__main__':
        main()

    问题部分:
    '''
    主函数
    '''
    def main():
        '''调用上面的方法和属性'''
        while True:
            try:
                # t = int(input('1。注册;2。登陆;3。退出登陆 
    '))
                t = int(input('1。注册;2。登陆;3。退出登陆 
    '))
                '''
                python3输入的整型,浮点型,字符串。都是被系统默认是字符串.下面代码失效
                '''
                print(type(t))
                if isinstance(t,float):
                    t = int(t)
                if isinstance(t,str):
                        if len(t)==1:
                            t = ord(t)
            except Exception as e:
                print(e.args)
            else:
                if t == 1:
                    username = infoUsername()
                    password = infoPassword()
                    register(username,password)
                elif t == 2:
                    username = infoUsername()
                    password = infoPassword()
                    login(username,password)
                    info(username,password)
                elif t == 3:
                    exit()
                else:
                    print('输入错误,请重新输入!')
            finally:
                print('')
    
    if __name__ == '__main__':
        main()






  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/shen-qiang/p/10671901.html
Copyright © 2011-2022 走看看