欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python之课后练习三

程序员文章站 2022-05-21 23:28:18
...

一、课后练习

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)

python之课后练习三

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

我们文件里的内容如下:
python之课后练习三
具体实现和结果:

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)

python之课后练习三

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()

python之课后练习三

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))

python之课后练习三

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))

python之课后练习三