Python中Hashlib&Class练习:1,编写带界面的注册系统,使用加密模块保存用户账户密码;2,创建一个Shape类,创建Rectangle类和Circle类继承Shape。

题目:

1:带界面的注册系统,使用加密模块保存用户账户密码。
2:创建一个Shape类(point)有两个属性x,y表示中心坐标;创建一个Rectangle类继承Shape,新增长,宽属性;创建一个Circle类继承Shape,新增半径属性;判断填入的坐标是否在矩形和圆形中。

解1:

导入sys&hashlib模块;创建“主界面”

import sys
import hashlib

UI = """
1.用户注册
2.用户登录
3.退出系统
"""
print(UI)

创建while循环,在内创建一个变量,可使用户输入其需求 ;创建一个函数。

while True:
    select = input("请选择你需要的功能(请输入1~3的数字后回车):")


    def choice(self):

 在函数内创建第一种情况(用户注册):

创建四个变量,先使用户输入账号,其次输入密码,再让用户输入密码,确保用户确定使用此密码。如果第二次密码与第一次密码不相符,将再使用户输入密码,如再错,返回主界面,重新选择;如输入正确,则将用户的账号&密码相加,用hashlib对此进行加密,再将加密后的值保存在名为“用户账号名”的文件内。完成以上操作后,打印“注册成功”&主界面。

        if self == "1":
            account = input("请输入账号:")
            password_1 = input("请输入密码:")
            password_2 = input("请再次输入密码:")
            if password_1 == password_2:
                pass
            else:
                print("密码输入错误,请重新输入密码")
                password_3 = input("请再次输入密码:")
                if password_1 == password_3:
                    pass
                else:
                    print("密码输入错误,返回主界面")
            sum = account + password_1
            md5 = hashlib.md5(sum.encode("utf-8"))
            with open(account + ".txt", "wt", encoding="utf-8") as write_f:
                write_f.write(md5.hexdigest())
            print("注册成功")
            print(UI)

在函数内创建第二种情况(用户登录):

输入“账号”&“密码”和加密“账号”&“密码”,同上。加密完成后,读取注册时保存的文件内容,如一致,则打印“登陆成功”;如不一致,则打印“账号或密码错误,请重新登录”,再返回主界面。

        elif self == "2":
            account = input("请输入账号:")
            password = input("请输入密码:")
            sum_1 = account + password
            md5 = hashlib.md5(sum_1.encode("utf-8"))
            with open(account + ".txt", "rt", encoding="utf-8") as read_f:
                hash = read_f.read()
                if md5.hexdigest() == hash:
                    print("登陆成功")
                else:
                    print("账号或密码错误,请重新登录")
            print(UI)

在函数内创建第三种情况(退出系统):

如用户选择此选项,则退出系统。

        else:
            sys.exit()

这个在while循环内,函数外,可使用户输入的内容,代入至函数中。

    choice(select)

运行结果如下(各种情况):

E:\Python\Files\lianxi\venv\Scripts\python.exe E:\Python\Files\lianxi\lianxi.py 

1.用户注册
2.用户登录
3.退出系统

请选择你需要的功能(请输入1~3的数字后回车):1
请输入账号:123
请输入密码:123
请再次输入密码:321
密码输入错误,请重新输入密码
请再次输入密码:123
注册成功

1.用户注册
2.用户登录
3.退出系统

请选择你需要的功能(请输入1~3的数字后回车):2
请输入账号:123
请输入密码:321
账号或密码错误,请重新登录

1.用户注册
2.用户登录
3.退出系统

请选择你需要的功能(请输入1~3的数字后回车):2
请输入账号:123
请输入密码:123
登陆成功

1.用户注册
2.用户登录
3.退出系统

请选择你需要的功能(请输入1~3的数字后回车):3

Process finished with exit code 0

解2:

创建七个变量,使用户可输入“矩形&圆的横坐标”&“矩形&圆的纵坐标”&“矩形的长”&“矩形的宽”&“圆的半径”&“目标坐标的横坐标”&“目标坐标的纵坐标”,矩形&圆的坐标为矩形&圆的中点。

x1 = float(input("请输入矩形&圆的横坐标:"))
y1 = float(input("请输入矩形&圆的纵坐标:"))
long_R = float(input("请输入矩形的长:"))
wide_R = float(input("请输入矩形的宽:"))
radius_C = float(input("请输入圆的半径:"))
x2 = float(input("请输入一个坐标的横坐标:"))
y2 = float(input("请输入一个坐标的纵坐标:"))

创建Shape类,里面为矩形&圆的坐标。

class Shape:
    def __init__(self, x, y):
        self.x = x
        self.y = y

创建Rectangle类,继承Shape,新增“long”&“wide”。在函数contain_R中,计算目标坐标是否在矩形内。

class Rectangle(Shape):
    def __init__(self, x, y, long, wide):
        super().__init__(x, y)
        self.long = long
        self.wide = wide

    def contain_R(self, X0, Y0):
        if self.x - self.long / 2 < X0 < self.x + self.long / 2 and self.y - self.wide / 2 < Y0 < self.y + self.wide / 2:
            print("该点在矩形内")
        else:
            print("该点不在矩形内")

创建Cricle类,继承Shape,新增“radius”。在函数contain_C中,计算目标坐标是否在圆内。

class Cricle(Shape):
    def __init__(self, x, y, radius):
        super().__init__(x, y)
        self.radius = radius

    def contain_C(self, X0, Y0):
        if (X0 - self.x) ** 2 + (Y0 - self.y) ** 2 < self.radius ** 2:
            print("该点在圆内")
        else:
            print("该点不在圆内")

此代码块表示将用户输入的值代入对应的函数中,再运行函数。

JuXing = Rectangle(x1, y1, long_R, wide_R)
JuXing.contain_R(x2, y2)
YuanXing = Cricle(x1, y1, radius_C)
YuanXing.contain_C(x2, y2)

结果如下:

目标坐标不在矩形&圆内:

E:\Python\Files\lianxi\venv\Scripts\python.exe E:\Python\Files\lianxi\lianxi.py 
请输入矩形&圆的横坐标:0
请输入矩形&圆的纵坐标:0
请输入矩形的长:10
请输入矩形的宽:10
请输入圆的半径:5
请输入一个坐标的横坐标:20
请输入一个坐标的纵坐标:20
该点不在矩形内
该点不在圆内

Process finished with exit code 0

目标坐标在矩形内,不在圆内:

E:\Python\Files\lianxi\venv\Scripts\python.exe E:\Python\Files\lianxi\lianxi.py 
请输入矩形&圆的横坐标:0
请输入矩形&圆的纵坐标:0
请输入矩形的长:10
请输入矩形的宽:10
请输入圆的半径:3
请输入一个坐标的横坐标:4
请输入一个坐标的纵坐标:4
该点在矩形内
该点不在圆内

Process finished with exit code 0

目标坐标在圆内,不在矩形内:

E:\Python\Files\lianxi\venv\Scripts\python.exe E:\Python\Files\lianxi\lianxi.py 
请输入矩形&圆的横坐标:0
请输入矩形&圆的纵坐标:0
请输入矩形的长:10
请输入矩形的宽:10
请输入圆的半径:10
请输入一个坐标的横坐标:6
请输入一个坐标的纵坐标:6
该点不在矩形内
该点在圆内

Process finished with exit code 0

目标坐标在矩形&圆内:

E:\Python\Files\lianxi\venv\Scripts\python.exe E:\Python\Files\lianxi\lianxi.py 
请输入矩形&圆的横坐标:0
请输入矩形&圆的纵坐标:0
请输入矩形的长:10
请输入矩形的宽:10
请输入圆的半径:5
请输入一个坐标的横坐标:1
请输入一个坐标的纵坐标:1
该点在矩形内
该点在圆内

Process finished with exit code 0

第一题完整代码:

import sys
import hashlib

UI = """
1.用户注册
2.用户登录
3.退出系统
"""
print(UI)
while True:
    select = input("请选择你需要的功能(请输入1~3的数字后回车):")


    def choice(self):
        if self == "1":
            account = input("请输入账号:")
            password_1 = input("请输入密码:")
            password_2 = input("请再次输入密码:")
            if password_1 == password_2:
                pass
            else:
                print("密码输入错误,请重新输入密码")
                password_3 = input("请再次输入密码:")
                if password_1 == password_3:
                    pass
                else:
                    print("密码输入错误,返回主界面")
            sum = account + password_1
            md5 = hashlib.md5(sum.encode("utf-8"))
            with open(account + ".txt", "wt", encoding="utf-8") as write_f:
                write_f.write(md5.hexdigest())
            print("注册成功")
            print(UI)
        elif self == "2":
            account = input("请输入账号:")
            password = input("请输入密码:")
            sum_1 = account + password
            md5 = hashlib.md5(sum_1.encode("utf-8"))
            with open(account + ".txt", "rt", encoding="utf-8") as read_f:
                hash = read_f.read()
                if md5.hexdigest() == hash:
                    print("登陆成功")
                else:
                    print("账号或密码错误,请重新登录")
            print(UI)
        else:
            sys.exit()


    choice(select)

第二题完整代码:

x1 = float(input("请输入矩形&圆的横坐标:"))
y1 = float(input("请输入矩形&圆的纵坐标:"))
long_R = float(input("请输入矩形的长:"))
wide_R = float(input("请输入矩形的宽:"))
radius_C = float(input("请输入圆的半径:"))
x2 = float(input("请输入一个坐标的横坐标:"))
y2 = float(input("请输入一个坐标的纵坐标:"))


class Shape:
    def __init__(self, x, y):
        self.x = x
        self.y = y


class Rectangle(Shape):
    def __init__(self, x, y, long, wide):
        super().__init__(x, y)
        self.long = long
        self.wide = wide

    def contain_R(self, X0, Y0):
        if self.x - self.long / 2 < X0 < self.x + self.long / 2 and self.y - self.wide / 2 < Y0 < self.y + self.wide / 2:
            print("该点在矩形内")
        else:
            print("该点不在矩形内")


class Cricle(Shape):
    def __init__(self, x, y, radius):
        super().__init__(x, y)
        self.radius = radius

    def contain_C(self, X0, Y0):
        if (X0 - self.x) ** 2 + (Y0 - self.y) ** 2 < self.radius ** 2:
            print("该点在圆内")
        else:
            print("该点不在圆内")


JuXing = Rectangle(x1, y1, long_R, wide_R)
JuXing.contain_R(x2, y2)
YuanXing = Cricle(x1, y1, radius_C)
YuanXing.contain_C(x2, y2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值