Day3笔记(作业)

1、写一个产生随机密码的函数,
  1、输入一个数字,就产生多少条密码
  2、密码长度在8-15直接
  3、密码必须包括大写字母、小写字母、数字和特殊字符
  4、密码不能以特殊字符串开头
  5、密码保存到文件里面

import random
import string

def op_file(file_name,content=None):
    if content:
        with open(file_name,'w',encoding='utf-8') as fw:
            fw.write(content)
    else:
        with open(file_name,encoding='utf-8') as fr:
            return fr.read()

def gen_password(num):#产生随机密码函数
    all_password = set()
    while len(all_password)!= num:
        length = random.randint(8,15)#密码长度在8-15字节
        temp = random.sample(string.digits+string.ascii_uppercase+string.ascii_lowercase+string.punctuation,length)
        if set(temp) & set(string.digits) and set(temp) & set(string.ascii_uppercase) and set(temp) & set(string.ascii_lowercase) \
                and set(temp) & set(string.punctuation) and not set(temp[0]) & set(string.punctuation):
            #密码必须包括大写字母、小写字母、数字和特殊字符且不以特殊字符开头
            password = ''.join(temp)
            all_password.add(password+'\n')
    return all_password

passwords = gen_password(100)

password_str = ''.join(passwords)
op_file('passwords.txt',password_str)

# string.ascii_letters#大小写字母
# string.ascii_lowercase#小写字母
# string.ascii_uppercase#大写字母
# string.punctuation#所有特殊符号

2、写一个管理商品的程序。
1、添加商品的时候,要输入
商品名称
价格
数量
商品已经存在要提示
价格可以是小数和整数,但是要大于0
数量也要大于0
2、修改商品
商品名称
价格
数量
商品存在才可以修改
3、删除商品
输入商品名称
商品不存在要提示
4、查看商品
直接把所有print出来就行了

import json
import os  #引入os模块

def is_positive_float(str1):
    if str1.count('.') == 1:
        left, right = str1.split('.')
        if left.isdigit() and right.isdigit():
            return True
        else:
            return False
    elif str1.isdigit() and int(str1) > 0:
        return True
    return False

def add_product():
    with open('product.json', 'a+', encoding='utf-8') as f:   #以a+模式打开文件,如果存在判断是否有商品
        f.seek(0)    #文件指针放到最前面以便读取文件
        if os.path.getsize('product.json'): #有商品读出商品,放到字典里
            product = json.load(f)
        else:
            product = {}       #没有商品不告诉用户,直接往下走
    name = input('请输入要添加的商品名称:').strip()
    price = input('请输入商品价格:').strip()
    count = input('请输入商品数量:').strip()
    if name in product:
        print('您添加的商品已经存在')
    elif not is_positive_float(price):
        print('您添加的商品价格不是大于0的数字')
    elif not count.isdigit() or int(count) == 0:
        print('您添加的商品数量不是大于0的整数')
    else:
        product.setdefault(name, {'price': eval(price), 'count': eval(count)})  #加一个eval,json中的值就没有“”
    with open('product.json', 'w', encoding='utf-8') as f:  #以清空原文件的写模式写入完整的字典数据
        json.dump(product, f, ensure_ascii=False, indent=4)

def modify_product():
    with open('product.json', 'r+', encoding='utf-8') as f:
        f.seek(0)
        if os.path.getsize('product.json'):
            product = json.load(f)
        else:
            print("暂无商品,您需要先去添加商品")
            return       #文件不存在结束函数
    name = input('请输入要修改的商品名称:').strip()
    price = input('请输入商品价格:').strip()
    count = input('请输入商品数量:').strip()
    if name not in product:
        print('您输入的商品不存在!')
    elif not is_positive_float(price):
        print('您添加的商品价格不是大于0的数字')
    elif not count.isdigit() or int(count) == 0:
        print('您添加的商品数量不是大于0的整数')
    else:
        product[name] = {
            'price': eval(price),#加一个eval,json中的值就没有“”
            'count': eval(count),#加一个eval,json中的值就没有“”
        }
    with open('product.json', 'w', encoding='utf-8') as fw:  # 以清空原文件的写模式写入完整的字典数据
        json.dump(product, fw, ensure_ascii=False, indent=4)

def del_product():
    with open('product.json', 'a+', encoding='utf-8') as f:
        f.seek(0)
        if os.path.getsize('product.json'):
            product = json.load(f)
        else:
            print("暂无商品,您需要先去添加商品")
            return       #文件不存在结束函数
    name = input('请输入要删除的商品名称:').strip()
    if name not in product:
        print('您输入的商品不存在!')
    else:
        product.pop(name)
    with open('product.json', 'w', encoding='utf-8') as f:
        if product:
            json.dump(product, f, ensure_ascii=False, indent=4)
        else:
            f.truncate()     #删除了所以商品后,product是空字典,继续写入会写入{},需要直接清空字典

def show_product():
    with open('product.json', 'a+', encoding='utf-8') as f:
        f.seek(0)
        if os.path.getsize('product.json'):
            product = json.load(f)
            return product
        else:
            print('暂无商品,请先添加商品')

choice = input('请选择您的操作:1.添加商品 2.修改商品 3.删除商品 4.查看商品\n')
if choice == '1':
    add_product()
elif choice == '2':
    modify_product()
elif choice == '3':
    del_product()
elif choice == '4':
    print(show_product())
else:
    print('输入有误')

# 1,文件内容为空时使用json.load(f)报错,json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0),所以要加一个判断文件内容是否为空。
# 2,当文件内已有商品时,a+模式下一开始没有seek(),导致有商品也未读到内容。
# 3,判断输入价格是否是大于0的数字时专门定义了一个函数来判断。
# 4,出现一些和以前的认知不符的结果时应该找找原因,肯定是哪里出问题了才会导致这样的结果,而不是直接否定之前的认识。

猜你喜欢

转载自www.cnblogs.com/lz523/p/11025853.html
今日推荐