Python的for,while,循环嵌套,if条件判断,列表,字典,json,密码密文,str,list,dict之间的转换等相关知识点

作业:编写登录接口

* 没有用户时,指导用户创建用户名和密码

* 已有用户时,指导用户输入用户名密码进行登录

* 认证成功后显示欢迎信息,若用户名为Admin,提示管理员登录信息,反之为普通用户登录信息

* 登录错误三次将该用户限制登录,管理员(Admin)除外

* 管理员可以取消用户登录限制

* 项目请采用终端演示,不要采用pycharm(pycharm对面密码密文不支持)

python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- versison: Python 3.6.5 -*-
#Auther JCL
import json
import getpass
user_file_name = 'user.json'
pass_file_name = 'pass.json'
fail_file_name = 'user_control.json'
with open(user_file_name,'r') as f_ob_1:  #file ==> memory
    user_list_str = f_ob_1.read() #memory ==>str
user_list = eval(user_list_str) #str ==> list
with open(pass_file_name,'r') as f_ob_2: #file ==> memory
    pass_list_str = f_ob_2.read() #memory ==>str
pass_list = eval(pass_list_str) #str ==> list
with open(fail_file_name,'r') as f_ob_3:
    user_fail_control_str = f_ob_3.read()
user_fail_control = eval(user_fail_control_str) #str ==> list
menu = int(input("0. 登陆用户\n1. 创建用户")) #菜单
if menu == 0:
    active = 0
    login_user = input("请输入你的用户名:")
    while active < 3:
        login_user_dict_1 = {login_user:0} #str ==>dict
        if login_user_dict_1 not in user_list:
            print("用户名不存在,请重新输入")
            break
        login_user_dict_2 = {login_user:3}
        if login_user_dict_2 in user_fail_control:
            print("该用户登录次数过多,已经被限制登录,请联系管理员处理")
            break
        login_passwd = getpass.getpass("请输入你的密码:")
        user_control = {login_user.lower(): 0}  # user info And control info ==> dict
        pass_control = {login_user.lower():login_passwd}
        if user_control in user_list and pass_control in pass_list and login_user == 'admin':
            print("Welcome To Login In SpuerAdmin Sir !")
            #取消用户限制控制区域 start==>
            cancel_control_list = []
            for cancel_list in user_fail_control:
                for x, y in cancel_list.items():
                    cancel_control_list.append(x)
            print(cancel_control_list)
            cancel_control = input("请输入您要取消限制登录的用户名:")
            if cancel_control not in cancel_control_list:
                print("您输入的用户名有误")
            else:
                user_fail_control.remove({cancel_control:3})
                user_fail_control__list_str = json.dumps(user_fail_control)
                with open(fail_file_name,'w') as f:
                    f.write(user_fail_control__list_str)
                print("用户",cancel_control,"已经可以登录!")
            #stop ==> 取消用户限制控制区域
            break
        if user_control in user_list and pass_control in pass_list:
            print("Welcome To Login In !",login_user)
            break
        else:
            print("用户名或密码错误")
            active +=1
    else:
        #错误登录控制区域 start==>
        if login_user != 'admin':
            user_fail_control_1 = {login_user:active}
            user_fail_control.append(user_fail_control_1)
            login_user_fail_control = json.dumps(user_fail_control)
            with open(fail_file_name,'w') as f:
                f.write(login_user_fail_control)
            print("您的失败登录次数已超过3次,用户已被锁定,请联系管理员处理")
        else:
            print("您的登录次数过多,请重新登录")
        #stop ==> 错误登录控制区域
if menu == 1:
    active = 1
    while active == 1:
        create_user_name = input("请输入你要创建的用户名:")
        user_control = {create_user_name.lower():0} #user info And control info ==> dict
        if user_control in user_list: #匹配dict
            print("用户名已存在,请输入新的用户名")
        else:
            create_pass_1 = getpass.getpass("请输入密码:")
            create_pass_2 = getpass.getpass("请确认密码:")
            if create_pass_1 == create_pass_2:
                print("用户",create_user_name,"创建成功!")
                break #跳出
            else:
                print("你两次输入的密码不匹配,创建失败!")
    #存储用户名和控制信息
    create_list = {create_user_name.lower():0} #info ==>dict
    user_list.append(create_list) #dict +==list
    json_str_user = json.dumps(user_list) #list ==> str
    with open(user_file_name,'w') as f_ob_1: #file ==> memory
        f_ob_1.write(json_str_user) #write
    # 存储用户名和密码信息
    pass_dict = {create_user_name.lower():create_pass_2} #info ==>dict
    pass_list.append(pass_dict)  #dict +==list
    json_str_pass = json.dumps(pass_list) #list ==> str
    with open(pass_file_name,'w') as f_ob_2: #file ==> memory
        f_ob_2.write(json_str_pass) #write

注三个文件必须提前创建,且不能为空,初始内容如下:

user.json #初始内容
[{"admin": "123"}]
pass.json #初始内容
[{"admin": 0}]
user_control.json #初始内容
[{"default": 3}]

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 循环结构是编程非常重要的一部分,其while循环是一种常见的循环结构。在Python,我们可以使用while循环来实现凯撒密码加密。 凯撒密码是一种简单的加密方法,它将明文的每个字母都替换为字母表固定位置后的字母。例如,如果我们将字母表向右移动3个位置,那么A就会变成D,B就会变成E,以此类推。 下面是一个使用while循环实现凯撒密码加密的示例代码: ``` # 定义明文和密钥 plaintext = "HELLO WORLD" key = 3 # 将明文转换为大写字母 plaintext = plaintext.upper() # 定义密文 ciphertext = "" # 遍历明文的每个字符 i = 0 while i < len(plaintext): # 如果是字母,则进行加密 if plaintext[i].isalpha(): # 将字母转换为ASCII码 ascii_code = ord(plaintext[i]) # 加上密钥 shifted_ascii_code = ascii_code + key # 如果超出了字母表范围,则回到字母表开头 if shifted_ascii_code > ord('Z'): shifted_ascii_code -= 26 # 将加密后的ASCII码转换为字母 ciphertext += chr(shifted_ascii_code) # 如果不是字母,则直接添加到密文 else: ciphertext += plaintext[i] i += 1 # 输出密文 print(ciphertext) ``` 在上面的代码,我们首先定义了明文和密钥。然后将明文转换为大写字母,以便后面的加密操作。接着定义了一个空字符串ciphertext,用于存储加密后的密文。 在while循环,我们遍历明文的每个字符。如果是字母,则进行加密操作。具体来说,我们将字母转换为ASCII码,然后加上密钥。如果加密后的ASCII码超出了字母表范围,则回到字母表开头。最后将加密后的ASCII码转换为字母,并添加到密文。如果不是字母,则直接添加到密文。 最后,我们输出加密后的密文。 ### 回答2: 凯撒密码是一种简单的加密方式,它的原理是将明文的每个字母用字母表其后面第k个字母来代替,其k为加密密钥。在Python,我们可以使用while循环来实现凯撒密码的加密过程。 首先,我们需要定义一个加密密钥k和明文字符串s,然后将密文字符串c初始化为空字符串。接下来,我们可以使用while循环来遍历明文字符串s的每个字符。对于每个字符,我们可以使用ord()函数将其转换成ASCII码,然后将其加上密钥k并对26取余,再使用chr()函数将其转换密文的字符。最后,我们需要将加密后的字符拼接到密文字符串c。 以下是凯撒密码加密的Python代码示例: ``` k = 3 # 加密密钥 s = "hello" # 明文字符串 c = "" # 密文字符串 i = 0 # 计数器 while i < len(s): ch = s[i] # 获取当前字符 code = ord(ch) # 将字符转换成ASCII码 code = (code + k) % 26 # 加密 cipher = chr(code + ord('a')) # 将ASCII码转换成字符 c += cipher # 将加密后的字符拼接到密文字符串 i += 1 # 计数器加1 print(c) # 输出密文字符串 ``` 执行以上代码,输出结果为"khoor",也就是"h"变成了"k","e"变成了"h","l"变成了"o","o"变成了"r","l"变成了"o"。 在while循环,我们使用计数器i来遍历明文字符串s的每个字符,直到i等于字符串长度为止。这样,我们就可以将明文字符串的每个字符加密成相应的密文字符,并将加密后的字符拼接到密文字符串c。在这个过程,我们还需要注意一些细节,例如字符转换成ASCII码时需要使用ord()函数,ASCII码转换成字符时需要使用chr()函数,以及字符下标从0开始计数等。 ### 回答3: 凯撒密码是古代的一种简单的加密方法,它把明文的每个字母都按照一个固定的偏移量进行移位,从而得到密文。在Python,我们可以使用while循环来实现凯撒密码的加密。 首先,我们需要定义一个变量来表示移位量,这个变量可以是任意整数。例如,假设我们选择将明文的每个字母都向右移动3个位置,那么移位量就是3。 然后,我们需要输入明文,也就是需要加密的文本。我们可以使用input()函数来获取用户输入。 接下来,我们需要定义一个空字符串变量cipher来表示密文,并使用while循环来逐个加密明文的每个字符。while循环的终止条件是处理完所有的字符。 在循环,我们需要先判断明文的字符是否是字母。如果是字母,就需要进行移位操作。我们可以使用ord()函数将字符转换为相应的ASCII码,然后加上移位量,再使用chr()函数将结果转换回字符。注意,如果移位后的字符超出了字母的范围,就需要将其回到字母表的起点或末尾。 如果不是字母,则直接将其加入密文。 最后,我们输出密文。 以下是凯撒密码加密的代码示例: ``` # 定义移位量 shift = 3 # 获取明文 plain_text = input("请输入明文:") # 加密明文 cipher = "" i = 0 while i < len(plain_text): # 判断当前字符是否是字母 if plain_text[i].isalpha(): # 对字母进行移位操作 ascii_code = ord(plain_text[i]) + shift if plain_text[i].isupper(): if ascii_code > ord('Z'): ascii_code -= 26 elif plain_text[i].islower(): if ascii_code > ord('z'): ascii_code -= 26 cipher += chr(ascii_code) else: cipher += plain_text[i] i += 1 # 输出密文 print("加密后的密文是:", cipher) ``` 以上就是使用while循环实现凯撒密码加密的详细过程。当然,这只是凯撒密码的一个简单实现,如果要更加安全和复杂的加密,可以使用更加高级的加密算法和密钥管理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值