python练习4

Title1:使用递归实现目录和文件的操作

        采用os模块及os.path模块,完成输出一个指定路劲下所有的文件

        当碰见文件时打印文件名称,当碰见目录时,则进入目录

        使用递归完成

# Title 1
import os
from os import path


def catalogue_file(input_path):
    global cataloguea  # 把cataloguea声明为全局变量
    # 把输入的路径划分为多个小部分,然后用列表装起来,再一个一个判断
    all_path = os.listdir(input_path)  
    for p in all_path:
        # 获取完整路径 判断是文件还是目录需要完整的路径,而不是一个文件名
        p_full = path.join(input_path, p)  
        if path.isfile(p_full):
            print(path.basename(p_full))
        elif path.isdir(p_full):
            # 判断如果是目录,就拼接两个的路径,相当于进入该目录
            cataloguea = path.join(input_path, p)  
            catalogue_file(p_full)
    return cataloguea

if __name__ == "__main__":
    # 1 YES
    input_path = input("请输入一个路径,分隔符请使用/或\\: ")
    catalogue_file(input_path)

Title2:判断用户输入字符串中字符次数

        用户输入一个字符串,统计字符串中各字符出现的次数,并将结果写入本地文件

# Title 2
def Statistical_character(input_str):
    char_count = {}  # 这里因为最终需要打印的是字符和次数的一一对应,所有创建字典
    for char in input_str:
        if char in char_count:
            char_count[char] += 1  # 如果存在,字符对应的值就会加一
        else:
            char_count[char] = 1  # 字符不存在时,在字典末尾添加一个字符,并赋一个初始值

    return char_count


def print_character(input_str):
    result = Statistical_character(input_str)
    res = []
    print("每个字符出现的次数:")
    for char, count in result.items():
        if char not in res:
            res.append(char)
            print(f"'{char}': {count}")
    # 打开一个名为output.txt的文件,如果文件不存在,则会创建文件
    with open("python_module\\userinfo.text", 'w', encoding="utf-8") as file:
        file.write("\n每个字符出现的次数:\n")
        for char, count in result.items():
            file.write(f"'{char}': {count}\n")

if __name__ == "__main__":
    # 2 YES
    input_str = input()
    print_character(input_str)

Title3:找出一个区间的重复数

        给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复   的整数 假设只有一个重复的整数,请找出这个重复的数,如[1,2,3,3,4],输出3

import random


def fount_repetition(n):
    int_list = [random.randint(1, n) for _ in range(n + 1)]
    print(int_list)
    panduan_list = []
    for i in int_list:
        if i not in panduan_list:
            panduan_list.append(i)
        else:
            print(i)

if __name__ == "__main__":
    # 3 YES
    # n = int(input())
    # fount_repetition(n)

Title4:验证登录

        编写控制台登录系统,假设已加密的账号密码存储在本地文件中,文件名为userinfo.text,用户输入账户名及密码,并验证登录,提示是否登录成功

# Title 4
import hashlib
import re

# 假设用户名和密码存储在本地文件中
username = "zhangsan"
password = "123456"
salt = "qqq"
username_location = hashlib.md5(username.encode("utf-8"))
password_location = hashlib.md5(password.encode("utf-8"))
username_location.update(salt.encode("utf-8"))
password_location.update(salt.encode("utf-8"))


# 判读非法字符的函数
def check_input(input_str):
    patten = re.compile(r'^[a-zA-Z0-9]+$')
    if patten.match(input_str):
        return True
    else:
        print("请重新输入:")
        check_input(input_str)


# 进行加密的函数
def md5_encryption(input_str):
    res = hashlib.md5(input_str.encode("utf-8"))  # md5加密
    res.update(salt.encode("utf-8"))  # 盐值加密
    return res.hexdigest()  # 返回加密后的字符序列


# 对输入内容进行判断是否为空
def check_kongge(input_str):
    if input_str.strip() == "":
        return True
    else:
        return False


# 验证登录成功的函数
def is_login(username, password):
    # 预处理  --- 去除空格
    username = username.replace(" ", "")
    password = password.replace(" ", "")

    # 2. 验证
    # - 自定义添加其他验证,比如非法字符,去除空格,是否为空等等
    # if check_kongge(username) and check_kongge(password):  # 对于输入为空的判断
    #     if check_input(username) and check_input(password):  # 非法字符的判断
    if username == username_location and password == password_location:  # 用户名和密码的判断
        return True
    else:
        False


if __name__ == "__main__":
    # 4 NO
    # uesrname = input("请输入你的用户名:")
    # password = input("请输入你的用户名密码:")
    # print("登录成功" if is_login(md5_encryption(uesrname), md5_encryption(password)) else "登录失败")

问题:输入了一样的用户名和密码,还是打印登录失败,注释掉一部分的验证函数,还是不行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值