Pythonpractice1

1.采用os模块及os.path模块,完成输出一个指定路劲下所有的文件,当碰见文件时打印文件名称,当碰见目录时,则进入目录使用递归完成

解题思路:

  1. 起始路径和基本条件

    • 首先,确定要搜索的起始路径,这是搜索开始的地方。
    • 我们需要考虑如何处理空路径或不存在的路径的情况。
  2. 遍历目录

    • 使用 os.listdir() 函数列出指定路径下的所有项目(文件和子目录)。
    • 对于每个项目,我们需要判断它是一个文件还是一个目录。
  3. 处理文件

    • 如果遍历到的项目是一个文件(通过 os.path.isfile() 判断),则输出该文件的名称。
    • 这是递归的基本情况,因为文件是搜索的终点。
  4. 处理目录

    • 如果遍历到的项目是一个目录(即不是文件),则需要进入这个目录继续搜索。
    • 这里使用了递归的方法,即调用自身 search() 函数来处理子目录。
    • 进入子目录后,重复上述步骤,继续遍历该子目录下的所有项目。
  5. 递归调用

    • 通过递归调用 search() 函数,可以深入地遍历目录结构,直到所有文件都被找到并输出它们的名称。
  6. 终止条件

    • 递归的终止条件是遇到文件(输出文件名),而不再进入子目录。
    • 递归调用确保了在搜索过程中每一层目录都能被处理,直到搜索完整个目录结构。

实现代码:

import os

def search(path_init):
    for item in os.listdir(path_init):
        item_path = os.path.join(path_init, item)
        if os.path.isfile(item_path):
            print(item)
        else:
            search(item_path)


def main():
    path_init = "C:\\Users\\25874\\Desktop\\PythonCodes"
    search(path_init)


if __name__ == "__main__":
    main()

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

解题思路:

  1. 接收输入:获取用户输入的字符串。
  2. 统计字符出现次数:编写函数来统计输入字符串中每个字符出现的次数,并将结果存储在字典中。
  3. 打开文件:使用文件操作打开一个目标文件,准备将结果写入其中。
  4. 写入结果:遍历统计结果字典,并将字符及其出现次数以指定格式写入文件中。
  5. 文件写入方式:需要注意选择适当的文件写入方式,确保不会丢失之前的文件内容。

实现代码:

def count_str(input_str):
    count_dict = {}
    for s in input_str:
        if s in count_dict:
            count_dict[s] += 1
        else:
            count_dict[s] = 1
    return count_dict


def main():
    input_str = input()
    result = count_str(input_str)
    f = open("C:\\Users\\25874\\Desktop\\PythonCodes\\python_io\\testio1.text", "r+")
    for items in result.items():
        f.write(f"{items[0]}:{items[1]} ")


if __name__ == "__main__":
    main()

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

解题思路:

  1. 生成随机数组:首先,从用户输入中获取一个整数 n,然后生成一个包含 n 个随机整数的列表。
  2. 统计数字出现次数:接着,定义了一个函数 searchSame(),用于统计列表中各个数字出现的次数,存储在字典中。
  3. 遍历统计结果:在 main() 函数中,遍历统计结果字典,如果某个数字出现次数大于 1,则打印该数字,这就是重复的数字。

实现代码:

import random

def searchSame(random_list):
    count_dict = {}
    for num in random_list:
        count_dict[num] = count_dict.get(num, 0) + 1
    return count_dict
    
def main():
    n = int(input("请输入n值:"))
    random_list = []
    for i in range(n):
        random_list.append(random.randint(1, n))
    result = searchSame(random_list)
    print(random_list)
    for k in result:
        if result[k] > 1:
            print(k)


if __name__ == "__main__":
    main()

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

解题思路:

用户信息以用户名和密码的形式保存在一个文件中。当用户尝试登录时,系统会要求输入用户名和密码。接着,系统会从文件中读取存储的用户名和对应的密码。密码被哈希加密过,这样即使用户信息被泄露,也无法直接获知密码。在验证用户名和密码时,系统将用户输入的密码与存储的哈希加密后的密码进行比对,如果匹配成功,则认为登录成功。此外,为了增加密码的复杂度,还引入了盐值的概念,将盐值与密码拼接后再进行哈希加密。这样即使两个用户使用相同的密码,其哈希值也会不同,增加了破解的难度。

账号密码存储格式:

实现代码:

import hashlib

def is_login(username, password, salt):
    hashed_username = hashlib.md5((username + salt).encode()).hexdigest()
    hashed_password = hashlib.md5((password + salt).encode()).hexdigest()
    
     # 从文件中读取加密后的用户名和密码
    with open("C:\\Users\\25874\\Desktop\\PythonCodes\\python_practice\\userinfo.text", "r") as f:
        for line in f:
            stored_username, stored_password = line.strip().split(":")
            # 比较输入的用户名和密码与文件中的是否匹配
            if stored_username == hashed_username and stored_password == hashed_password:
                return "登录成功"
    return "登录失败"

def main():
    username = input("请输入用户名:")
    password = input("请输入密码:")
    salt = input("请输入盐值:")
    print(is_login(username, password, salt))


if __name__ == "__main__":
    main()

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值