python之课后练习三

一、课后练习

1、题目需求:批量修改文件名

具体实现如下

import os

# 批量在文件名前加前缀
funFlag = 1  # 1表示添加标志, 2表示删除标志
folderName = './renameDir/'
# 获取指定路径的所有文件名字
folderName_List = os.listdir(folderName)

# 遍历输出所有文件名字
for oldname in folderName_List:
    if funFlag == 1:
        newName = '[西部开源]-' + oldname

    elif funFlag == 2:
        num = len('[西部开源]-')
        newName = oldname[num:]
    print("重命名 【%s】为【%s】成功! " % (oldname, newName))

    os.rename(folderName + oldname, folderName + newName)

在这里插入图片描述

2、读取一个文件,显示除了以井号(#)开头的行以外的所有行。

我们文件里的内容如下:
在这里插入图片描述
具体实现和结果:

readfile_List = []
with open('doc/test.txt','r+') as f:
    while True:
        readfile = f.readline()
        if readfile:
            readfile_List.append(readfile)
        else:
            break

for item in readfile_List:
    if not item.startswith("#"):
        print(item)

在这里插入图片描述

3、制作一个"密码薄",其可以存储一个网址(例如 www.csdn.net),和一个密码(例如 123456),请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能。

具体实现如下:

"""
制作一个密码薄,其可以存储一个网址
实现增删改查功能,并且实现文件存储功能
"""
import os
import json
passwd_book = {}
def User_operate():
    print('网址密码薄'.center(50, '~'))
    print("""
            1.添加网址信息
            2.删除网址信息
            3.修改网址信息
            4.查看网址信息
            9.退出系统
    请选择:
        """)

    while True:
        operate = int(input("请输入您想进行的操作:"))
        if operate == 1:
            add_website()

        elif operate == 2:
            del_website()

        elif operate == 3:
            revise_website()

        elif operate == 4:
            view_website()

        elif operate == 9:
            break
        else:
            print('请输入正确的操作符')

#查看网址信息和密码
def view_website():
    global passwd_book
    with open('doc/test.json') as f:
        test = json.load(f)
    print(test)
    return

#添加新的网址信息和密码
def add_website():
    global passwd_book
    with open('doc/test.json', 'w+') as f:
        website = input("请输入您想要添加的网站:")

        if website not in passwd_book.keys():
            web_Passwd = input("请输入网站的密码:")
            passwd_book[website] = web_Passwd
            passwd_book_str = json.dumps(passwd_book)
            f.write(passwd_book_str)
            passwd_book = json.loads(passwd_book_str)
        else:
            print('该网址已存在!')
    return
#修改网址信息和密码
def revise_website():
    global passwd_book
    with open('doc/test.json', 'w+') as f:
        website = input("请输入您想要修改的网站:")

        if website in passwd_book.keys():
            new_web = input('请输入新网址:')
            new_Passwd = input("请输入网站修改后的密码:")
            passwd_book[new_web] = new_Passwd
            del passwd_book[website]
            passwd_book_str = json.dumps(passwd_book)
            f.write(passwd_book_str)
            passwd_book = json.load(f)
        else:
            print('该网址不存在!')
    return

#删除一个网址信息和密码
def del_website():
    global passwd_book
    with open('doc/test.json', 'w+') as f:
        website = input("请输入您想要删除的网站:")

        if website in passwd_book.keys():
            del passwd_book[website]
            passwd_book_str=json.dumps(passwd_book)
            f.write(passwd_book_str)
            passwd_book = json.loads(passwd_book_str)
        else:
            print('该网址不存在!')
    return

User_operate()

在这里插入图片描述

4、无重复最长字符串

维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。
1)如果当前遍历到的字符从未出现过,那么直接扩大右边界;
2)如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动),然后继续观察当前遍历到的字符;
3)重复(1)(2),直到左边索引无法再移动;
4)维护一个结果res,每次用出现过的窗口大小来更新结果res,最后返回res获取结果。
具体实现如下:

def StrLenght(s):
    MaxLen = 0
    s_Dict = {}
    oneMax = 0
    start = 0
    for i in range(len(s)):
        if s[i] in s_Dict and s_Dict[s[i]] >= start:
            start = s_Dict[s[i]] + 1
        oneMax = i - start + 1
        s_Dict[s[i]] = i
        MaxLen = max(MaxLen, oneMax)
    return MaxLen

sStr = input('请输入一串英文字母:')
print(StrLenght(sStr))

在这里插入图片描述

5、矩阵置零

给定一个矩阵,如果一个元素为0,则所在行或列所有元素都为0
具体实现如下:

def Matrix_Zeroes(s):
    columns, linenum = len(s), len(s[0])
    zeroSeat = [[i, j] for i in range(columns) for j in range(linenum) if s[i][j] == 0]
    for items in zeroSeat:
        i, j = items[0], items[1]
        s[i] = [0 for n in range(linenum)]
        for k in range(columns):
            s[k][j] = 0
    return s

s = [
    [1, 3, 1, 4],
    [1, 0, 3, 1],
    [1, 4, 0, 3],
    [1, 1, 0, 1]
]
print(Matrix_Zeroes(s))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值