码迷,mamicode.com
首页 > 编程语言 > 详细

Python基础题(二)

时间:2018-10-19 00:12:34      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:and   闭包   dll   元组   组织   sts   二分法   统计   atm   

1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作

技术分享图片
def modify_file(filename,old,new):
    import os
    with open(filename,r,encoding=utf-8) as \read_f,open(.bak.swap,w,encoding=utf-8) as write_f:
        for line in read_f:
            if old in line:
                line=line.replace(old,new)
            write_f.write(line)
    os.remove(filename)
    os.rename(.bak.swap,filename)

modify_file=input(请输入你要修改的文件路径====> :)

#字符串的操作一定要熟练,文件处理大部分都是字符串的处理工作
View Code

2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数

技术分享图片
def check_str(msg):
    res={
        num:0,
        string:0,
        space:0,
        other:0,
    }
    for s in msg:
        if s.isdigit():
            res[num]+=1
        elif s.isalpha():
            res[string]+=1
        elif s.isspace():
            res[space]+=1
        else:
            res[other]+=1
    return res

res=check_str(hello name:aSB passowrd:alex3714)
print(res)
View Code

3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

技术分享图片
def obj_len(obj): 
    if len(obj)>5:
        print(长度大于五)
    else:
        print(长度小于五)      
obj=input(用户输入的对象===> :)
View Code

4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

技术分享图片
def list_len(list_1):
    if len(list_1)>2:
        list_1=list_1[:2]
    return list_1

print(list_len([1,2,5,8,7]))
View Code

5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

技术分享图片
def spe(list_old):
    list_old=list_old[::2]
    return list_old

print(spe([0,0,0,2,5,5,5,8,48,8]))
View Code

6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表

技术分享图片
def func3(dic):
    d={}
    for k,v in dic.items():   #这一步为了更好的处理字典的键和值
        if len(v) > 2:
            d[k]=v[0:2]
    return d
print(func3({k1:abcdef,k2:[1,2,3,4],k3:(a,b,c)}))
View Code

7、编写函数,(函数执行的时间是随机的)

技术分享图片
import random
import time

def outer():
    start=time.time()
    print(egon dashuaibi)
    time.sleep(random.randint(0,3))
    stop=time.time()
    print(run time is %s%(stop-start))

outer()
View Code

8、编写装饰器,为函数加上统计时间的功能

技术分享图片
import time

def index():
    print(egon dashuaibi)
    time.sleep(3)

def outter(func):
    def wrapper():
        start=time.time()
        func()
        stop=time.time()
        print(run time is %s %(stop-start))
    return wrapper

index=outter(index)
index()
View Code

9、编写装饰器,为函数加上认证的功能

 

 

10、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval(‘{"name":"egon","password":"123"}‘)转成字典格式

 

 

11、编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

 

12、编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果

 

13、为题目五编写装饰器,实现缓存网页内容的功能:
具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

扩展功能:用户可以选择缓存介质/缓存引擎,针对不同的url,缓存到不同的文件中

 

14、还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

 

15、编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime(‘%Y-%m-%d %X‘)

 

16   模拟实现一个ATM + 购物商城程序

  1. 额度 15000或自定义
  2. 实现购物商城,买东西加入 购物车,调用信用卡接口结账
  3. 可以提现,手续费5%
  4. 每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
  5. 支持多账户登录
  6. 支持账户间转账
  7. 记录每月日常消费流水
  8. 提供还款接口
  9. ATM记录操作日志 
  10.  提供管理接口,包括添加账户、用户额度,冻结账户等。。。
  11. 用户认证用装饰器
技术分享图片
# import time
import datetime
# time.time()   # 当前时间戳
# datetime.datetime.now() # 本地之间


# 数据处理=====================================
# 全部用户数据
user_data = []
# 加载数据到内存
def load_data():
    f = open("DB/user_db.txt","rt",encoding="utf-8")
    for line in f:
        line = line.strip("\n")
        if line == "\n":continue
        ls = line.split("|")
        usr_dic = {"name":ls[0],
                   "pwd":ls[1],
                   "max": ls[2],
                   "money": ls[3],
                   "lock": ls[4]}
        user_data.append(usr_dic)
    f.close()

# 根据账户名获取一个用户
def get_usr(name):
    for usr in user_data:
        if usr["name"] == name:
            return usr

# 将内存中的数据持久存储到文件中
def save_to_file():
    f = open("DB/user_db.txt","wt",encoding="utf-8")
    for usr in user_data:
        text = "|".join(usr.values())
        text += "\n"
        f.write(text)
    f.close()


# 数据处理=====================================

# 登录验证装饰器(闭包函数) (再不改变源代码的调用方式基础上 为这个函数添加新功能)
def login_auth(func):
    def wrapper(*args,**kwargs):
        # 验证是否登陆过了
        if current_usr == None:
            print("请先登录!")
            atm_login()
            if current_usr:
                return func(*args,**kwargs)
        else:
            return func(*args,**kwargs)
    return wrapper



# 购物中心========================================
# 商品信息
products = [{"name":"挨粪叉","price":6888},
            {"name":"锤子TNT","price":10888},
            {"name":"小米mix2","price":2888}]

# 购物车
car = {}

# 购物
def shopping():
    while True:
    # 打印出所有商品信息
        count = 1
        for p in products:
            print("序号:%-3s 名称:%-10s 价格:%-6s" % (count,p["name"],p["price"]))
            count += 1
        select = input("亲输入商品的序号q退出:\n")
        if select == "q":
            return
        if select.isdigit() and int(select) >= 1 and int(select) <= len(products):
            pd = products[int(select)-1]
            print("%s已成功加入购物车!" % pd["name"])
            # 判断商品是否已经存在于购物车
            if pd["name"] in car:
                car[pd["name"]]["count"] += 1
            else:
                car[pd["name"]] = {"price":pd["price"],"count":1}
        else:
            print("输入有误请重新输入!")


# 查看购物车
def show_cars():
    if not car:
        s = input("你的购物车是空的! 你要买点什么吗? y/n")
        if s == "y":
            shopping()
            return
        else:
            return
    print("您的购物车信息:")
    for p in car:
        print("名称:%-10s 价格:%-8s 数量:%-3s 总价:%-10s" % (p,
                                                     car[p]["price"],
                                                     car[p]["count"],
                                                     car[p]["price"] * car[p]["count"]))
    select = input("输入y调整商品数量!(数量为0则删除商品!) 输入其他退出!")
    if select == "y":
        modify_count()


# 调整购物车中的商品数量
def modify_count():
    while True:
        name = input("请输入商品名称q退出:\n")
        if name == "q":
            return
        if name not in car:
            print("输入不正确请重试!")
            continue

        while True:
            count = input("输入调整后数量:\n")
            if not count.isdigit():
                print("数量不正确 必须是整数!")
                continue
            count = int(count)
            if count == 0:
                car.pop(name)
                print("%s已删除" % name)
                return
            else:
                car[name]["count"] = count
                print("修改成功!")
                return


# 结算
@login_auth
def pay_cars():
    # 计算商品总价格
    sum = 0
    for p in car:
        sum += car[p]["price"] * car[p]["count"]
    print("您的订单总价为:%s元" % sum)
    if paymoney(sum):
        print("剁手成功! 回家等着吧!")
        clear_cars()


# 清空购物车
def clear_cars():
    car.clear()
    print("购物车已清空!")


def shop_center():
    shopfuncs = {"1":shopping,"2":show_cars,"3":pay_cars,"4":clear_cars}
    while True:
        print("""
1.购物
2.查看购物车
3.结算
4.清空
q.退出""")
        index = input("请选择:\n").strip()
        if index == "q":
            return
        if index in shopfuncs:
            shopfuncs[index]()
        else:
            print("输入不正确!请重试!")


# 购物中心========================================

# ATM====================================================
# 用于保存登录成功的用户信息
current_usr = None

# 日志装饰器.
# 日志文件
atmlog_file = open("DB/log.txt","at",encoding="utf-8")

# 用户流水文件
moneyflow = None

def atm_logger(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        # 记录日志
        atmlog_file.write("[%s] user:%s function:%s\n" % (datetime.datetime.now(),current_usr["name"],func.__name__))
        atmlog_file.flush() # 立即刷出缓存区的数据到硬盘 如果每次write都操作一次硬盘
                            # 效率非常低 所以python内置了缓冲区  只有当缓冲区满了才会写入硬盘 一次来降低硬盘操作次数
    return wrapper


# 登录
def atm_login():
    while True:
        name = input("请输入账户名:(q退出)\n").strip()
        # 手动记录日志 因为用户还没有登陆
        atmlog_file.write("[%s] user:%s function:%s\n" % (datetime.datetime.now(), name, atm_login.__name__))
        atmlog_file.flush()
        if name == "q":
            return
        if not name:
            print("用户名不能为空!")
            continue
        usr = get_usr(name)
        if not usr:
            print("用户名不存在!")
            continue

        pwd = input("请输入密码:\n").strip()
        if not pwd:
            print("密码不能为空!")
            continue
        if name == usr["name"] and pwd == usr["pwd"]:
            print("登录成功")

            global current_usr,moneyflow
            # 打开流水文件
            moneyflow = open("DB/%s.txt" % name,"at",encoding="utf-8")
            # 记录当前登录用户信息
            current_usr = usr
            return
        else:
            print("账户名或密码不正确!请重试!")


#     提现
@login_auth
@atm_logger
def withdraw():
    while True:
        print("当前余额:%s元" % current_usr["money"])
        money = input("请输入提款金额:(整数 q退出)\n")
        if money == "q":return
        if not money.isdigit():
            print("输入有误!请重试!")
            continue
        money = int(money)
        # 手续费
        opt = money * 0.05
        print("需要手续费%s元" % opt)
        usr_moeny = float(current_usr["money"])
        if money+opt > usr_moeny:
            print("余额不足!很尴尬")
            continue
        current_usr["money"] = str(usr_moeny - money - opt)
        save_to_file()
        print("请提取你的钞票!")
        moneyflow.write("[%s] 账户:%s 提现%s元 余额%s元\n" % (datetime.datetime.now(),
                                                    current_usr["name"],
                                                    money,
                                                    current_usr["money"]))
        moneyflow.flush()
        return

#     转账
@login_auth
@atm_logger
def transfer():
    while True:
        account = input("请输入对方的账户名:\n")
        to_usr = get_usr(account)
        if not to_usr:
            print("账户不存在 请重新输入!")
            continue
        print("当前余额:%s元" % current_usr["money"])
        money = input("请输入转账金额:(整数 q退出)\n")
        if money == "q": return
        money = str_to_num(money)
        if not money:
            print("输入有误!请重试!")
            continue
        usr_moeny = float(current_usr["money"])
        if money  > usr_moeny:
            print("余额不足!很尴尬")
            continue
        # 原始账户减去
        current_usr["money"] = str(usr_moeny - money)
        # 目标账户加上
        to_usr["money"] = str(float(to_usr["money"]) + money)
        save_to_file()
        print("转账成功!")
        moneyflow.write("[%s] 账户:%s 转账%s元 给%s 余额%s元\n" % (datetime.datetime.now(),
                                                    current_usr["name"],
                                                    money,
                                                    account,
                                                    current_usr["money"]))
        moneyflow.flush()
        return


# 将字符串转成数字 "11212101.s"
def str_to_num(text):
    if text.isdigit():
        return int(text)
    if "." in text:
        ts = text.split(".")
        if len(ts) == 2:
            if ts[0].isdigit() and ts[1].isdigit():
                return float(text)

#     还款
@login_auth
@atm_logger
def repayment():
    print("您当前欠款:%s" % (str_to_num(current_usr["max"]) - str_to_num(current_usr["money"])))
    while True:
        print("repayment")
        money = input("请输入还款金额!q退出:\n")
        if money == "q":return
        money = str_to_num(money)
        if not money:
            print("输入有误 请重试!")
            continue
        current_usr["money"] = str(str_to_num(current_usr["money"]) + money)
        save_to_file()
        print("还款成功!")
        moneyflow.write("[%s] 账户:%s 还款%s元 余额%s元\n" % (datetime.datetime.now(),
                                                    current_usr["name"],
                                                    money,
                                                    current_usr["money"]))
        moneyflow.flush()
        return

# 结算 需要传入订单总价格
@login_auth
@atm_logger
def paymoney(price):
    if price > str_to_num(current_usr["money"]):
        print("额度不足!又尴尬了")
    else:
        current_usr["money"] = str(str_to_num(current_usr["money"]) - price)
        save_to_file()
        print("结算成功!")
        moneyflow.write("[%s] 账户:%s 购物消费%s元 余额%s元\n" % (datetime.datetime.now(),
                                                    current_usr["name"],
                                                    price,
                                                    current_usr["money"]))
        moneyflow.flush()
        return True


def atm():
    atm_funcs = {"1": atm_login, "2": withdraw, "3": transfer, "4": repayment}
    while True:
        print("""
1.登录
2.提现
3.转账
4.还款
(q.退出!)""")
        index = input("请选择:\n")
        if index == "q":
            # 清空当前用户信息 关闭流水文件
            global current_usr
            if current_usr:
                current_usr = None
                moneyflow.close()

            return
        if index in atm_funcs:
            atm_funcs[index]()
        else:
            print("输入有误请重试!")

# ATM====================================================

# 管理员接口=============================================

# 显示所有的用户信息 并从中选择一个用户
def show_users_and_select():
    while True:
        for usr in user_data:
            print("%-10s %-10s %-10s %-2s" % (usr["name"],usr["max"],usr["money"],usr["lock"]))
        select = input("请选择一个用户(输入用户名:q退出)\n")
        if select == "q":
            return
        for u in user_data:
            if select == u["name"]:
                return u
        else:
            print("输入不正确 请重新输入!")


# 管理员登录
def admin_login():
    while True:
        name = input("请输入管理员账户名:(q退出)\n").strip()
        if name == "q":
            return
        if not name:
            print("用户名不能为空!")
            continue
        pwd = input("请输入管理员密码:\n").strip()
        if not pwd:
            print("密码不能为空!")
            continue
        if name == "admin" and pwd == "123":
            print("登录成功")
            return True
        else:
            print("账户名或密码不正确!请重试!")


#添加账户
def create_user():
    while True:
        name = input("请输入账户名:(q退出)\n").strip()
        if name == "q":
            return
        if not name:
            print("用户名不能为空!")
            continue
        # 获取用户 通过账户名
        usr = get_usr(name)
        if usr:
            print("用户名已经存在,请重试!")
            continue
        pwd = input("请输入密码:\n").strip()
        if not pwd:
            print("密码不能为空!")
            continue
        if pwd != input("请再次输入密码:").strip():
            print("两次密码不相同请重试!")
            continue
        # 将用户输入的信息打包成字典 存到列表中
        new_usr = {"name":name,"pwd":pwd,"max":"15000","money":"500","lock":"0"}
        user_data.append(new_usr)
        print("创建成功!")
        # 持久化存储......
        save_to_file()
        return


#调整额度
def modify_amount():
    # 先选择一个用户
    usr = show_users_and_select()
    if not usr:
        return
    while True:
        # 输入新的额度
        new_max = input("请输入新的额度:(q退出)\n").strip()
        if new_max == "q":
            return
        if not new_max.isdigit():
            print("输入不正确 请重新输入!")
            continue
        usr["max"] = new_max
        save_to_file()
        print("修改成功!")
        return

#冻结账户
def lock_user():
    # 先选择一个用户
    usr = show_users_and_select()
    if not usr:
        print("取消操作!")
        return
    usr["lock"] = "1"
    save_to_file()
    print("冻结成功!")

#解冻账户
def unlock_user():
    # 先选择一个用户
    usr = show_users_and_select()
    if not usr:
        print("取消操作!")
        return
    usr["lock"] = "0"
    save_to_file()
    print("解冻成功!")

# 管理员接口界面
def admin_view():
    # 调用登录功能验证是否有权限执行操作
    if not admin_login():
        return
    admin_funcs = {"1":create_user,"2":modify_amount,"3":lock_user,"4":unlock_user}
    while True:
        print("""
1.添加账户
2.修改额度
3.冻结账户
4.解冻账户
(q.退出!)""")
        index = input("请选择:\n")
        if index == "q":
            return
        if index in admin_funcs:
            admin_funcs[index]()
        else:
            print("输入有误请重试!")
# 管理员接口=============================================

# 程序的入口函数
def run():
    print("welcome to oldboy ATM system!")
    # 将函数装到字典中 用序号作为key 方便判断
    funcs = {"1": shop_center, "2": atm, "3": admin_view}
    while True:
        print("""
1.购物中心
2.ATM
3.管理员接口
(q.退出!)""")
        index = input("请选择:\n")
        if index == "q":
            print("下次再见!")
            return
        if index in funcs:
            funcs[index]()
        else:
            print("输入有误请重试!")

# 启动系统
load_data()
run()
atmlog_file.close()

# print(user_data)
# print(str_to_num("100.s"))







# 只有程序时从当前文件开始运行时才进入if语句
# if __name__ == ‘__main__‘:
View Code

17、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中的名字全部变大写

技术分享图片
new_names=[i.upper() for i in names]
print(new_names)
View Code

18、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中以sb结尾的名字过滤掉,然后保存剩下的名字长度

技术分享图片
names=[len(name) for name in names if not name.endswith(sb)]
print(names)
View Code

19、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)

技术分享图片
with open(rF:\python学习代码\DB\a.txt,mode=rt,encoding=utf-8) as f:
    print(max(len(i) for i in f ))
View Code

20、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)

技术分享图片
with open(rF:\python学习代码\DB\a.txt,mode=rt,encoding=utf-8) as f:
    print(sum(len(i) for i in f ))
    print(sum(len(i) for i in f))
在第一次打印之后,迭代器的内容就被取空了
View Code

21、思考题

with open(‘a.txt‘) as f:
  g=(len(line) for line in f)
print(sum(g)) #为何报错?

技术分享图片
因为生成器表达式是加载在系统空间的,文件关闭后生成器表达式的内存地址丢失
View Code

22、文件shopping.txt内容如下

mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1
求总共花了多少钱?

打印出所有商品的信息,格式为[{‘name‘:‘xxx‘,‘price‘:333,‘count‘:3},...]

求单价大于10000的商品信息,格式同上

技术分享图片
with open(a.txt,encoding=utf-8) as f:
    info=[line.split() for line in f]
    cost=sum(float(unit_price)*int(count) for _,unit_price,count in info)
    print(cost)


with open(a.txt,encoding=utf-8) as f:
    info=[{
        name: line.split()[0],
        price: float(line.split()[1]),
        count: int(line.split()[2]),
    } for line in f]
    print(info)


with open(a.txt,encoding=utf-8) as f:
    info=[{
        name: line.split()[0],
        price: float(line.split()[1]),
        count: int(line.split()[2]),
    } for line in f if float(line.split()[1]) > 10000]
    print(info)
每次必须重新打开文件或seek到文件开头,因为迭代完一次就结束了
View Code

23、想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模

实现类似于in的效果
实现类似于l.index(30)的效果

技术分享图片
nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]  # 从小到大排列的数字列表
def binary_search(find_num,nums):
    print(nums)
    if len(nums) == 0:
        print(not exists)
        return

    # 功能
    mid_index = len(nums) // 2
    if find_num > nums[mid_index]:
        # in the right
        nums=nums[mid_index+1:]
        # 重新运行功能,传入新列表
        binary_search(find_num,nums)
    elif find_num < nums[mid_index]:
        # in the left
        nums=nums[:mid_index]
        # 重新运行功能,传入新列表
        binary_search(find_num,nums)
    else:
        print(find it)

binary_search(97,nums)
binary_search(95,nums)
View Code
技术分享图片
l=[1,2,10,30,33,99,101,200,301,402]

def search(num,l,start=0,stop=len(l)-1):
    if start <= stop:
        mid=start+(stop-start)//2
        print(start:[%s] stop:[%s] mid:[%s] mid_val:[%s] %(start,stop,mid,l[mid]))
        if num > l[mid]:
            start=mid+1
        elif num < l[mid]:
            stop=mid-1
        else:
            print(find it,mid)
            return
        search(num,l,start,stop)
    else: #如果stop > start则意味着列表实际上已经全部切完,即切为空
        print(not exists)
        return

search(301,l)
View Code

24、模块有哪些来源

技术分享图片
1. 使用python编写的.py文件

2. 已被编译为共享库或DLL的C或C++扩展

3. 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

4 .使用C编写并链接到python解释器的内置模块
View Code

25、模块的格式要求有哪些

技术分享图片
包含了一组功能的python文件,比如spam.py
View Code

26、定义一个cuboid模块,模块中有三个变量长(long)宽(wide)高(high),数值自定义,有一个返回值为周长的perimeter方法,一个返回值为表面积的area方法

技术分享图片
#cuboid.py

long=5
wide=6
hign=3

def perimeter():
    perimeter=4*(long+wide+hign)
    return perimeter

def arer():
    arer=2*(wide*long+long*hign+wide*hign)
    return arer
View Code

27、定义一个用户文件stu1.py,在该文件中打印cuboid的长宽高,并获得周长和表面积,打印出来

技术分享图片
#stu1.py
import cuboid

# __name__=‘__main__‘
print(cuboid.long,cuboid.wide,cuboid.hign)
print(cuboid.perimeter())
print(cuboid.arer())
View Code

28、在stu2.py文件中导入cuboid模块时为模块起简单别名,利用别名完成第3题中完成的操作

技术分享图片
#stu2.py
import cuboid as f

# __name__=‘__main__‘
print(f.long,f.wide,f.hign)
print(f.perimeter())
print(f.arer())
View Code

29、现在有三个模块sys、time、place,可以在run.py文件导入三个模块吗?有几种方式?分别写出来

技术分享图片
#run.py

四种

# import sys,time,place

# import sys
# import time
# import place

# import sys as a
# import time as  b
# import place  as c


# from sys import * 
# from time import * 
# from place import * 
View Code

30、结合第2、3、4题完成from...import...案例,完成同样的功能

技术分享图片
from cuboid import arer,perimeter,long,wide,hign


print(long,wide,hign)
print(arer())
print(perimeter())
View Code

31、比较总结import与from...import...各自的优缺点 

技术分享图片
#唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.

from...import...的方式有好处也有坏处
好处:使用起来方便了
坏处:容易与当前执行文件中的名字冲突
View Code

32、请写出规范目录 并解释各文件夹的作用,并说明规范目录结构的好处

技术分享图片
软件目录结构规范有什么好处:
  通过规范化,能够更好的控制软件结构,让程序具有更高的可读性。

项目目录组织结构如下:
Foo/          # 项目名
    --bin/       # 可执行文件目录
        --foo    # 可执行程序
    --core/      # 主程序目录
        --test/   # 测试用例(用于对项目中功能性测试)
            --__init__.py
            --test_main.py
        --__init__.py
        --main.py  # 主程序入口
    --conf/     # 配置文件目录
        --settings.py  #配置文件
    --logs/     # 日志文件目录
        --log    # 日志文件
    --docs/      # 文档类目录
    --setup.py     # 安装部署脚本
    --requirements.txt  #依赖关系,存放依赖的软件包名称,
    --README     # 程序说明

个别说明:
README内容说明
1:软件定位,软件的基本功能
2:运行代码的方式:安装环境,启动命令等。
3:简要的使用说明。
4:代码目录结构说明,更详细可以说明软件的基本原理
5:常见问题说明。

requirements.txt
文件格式是一行包含一个包依赖的说明,要求这个格式能被pip识别,使用方式:
pip install -r requirements.txt   来安装所有依赖的包

以上各个目录模块如何动态导入,实现动态迁移。
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
这里:通过动态导入项目的当前根路径即可。
View Code

33、改造atm+购物车   将代码拆分到不同模块中,用规范目录来管理这些模块


34.在启动文件中应该将项目的根目录添加到环境变量

 

35.有以下目录 请在编写代码 添加根目录到环境变量,以保证在其他地方core中能访问lib中的内容
bin
start.py
core
ATM.py
lib
common.py


36.time模块中的三种时间类别分别是?请编写代码来获取

 

37.datetime模块常用功能是什么?编写代码进行测试

 

38.将你前后左右的同学的信息编写为xml文档,并在python中解析该文件进行展示

技术分享图片
import xml.etree.ElementTree as ET

new_xml = ET.Element("周围的同学")
name = ET.SubElement(new_xml, "name")
age = ET.SubElement(name, "age")
sex = ET.SubElement(name, "sex")
name.text="张三"
age.text ="18"
sex.text = "man"

name2 = ET.SubElement(new_xml, "name")
age = ET.SubElement(name2, "age")
name2.text="李四"
age.text = "19"
sex.text="man"

et = ET.ElementTree(new_xml)  # 生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True)

ET.dump(new_xml)  # 打印生成的格式
编写为xml文件
技术分享图片
import xml.etree.ElementTree as ET

res=ET.parse("test.xml")
print(res)

name=res.getiterator("name")
for i in name:
    print(i.text)

name=res.getiterator("age")
for i in name:
    print(i.text)

name=res.getiterator("sex")
for i in name:
    print(i.text)
解析xml文件

39.用json格式存储一些歌曲信息,包括
流派
歌曲名称
作者
年代

实现 输入流派展示对应的歌曲


40.做一个登录 首先查看配置文件是否包含用户名和密码如果有直接登录,如果没有就进行输入用户名密码登录,登录成功后询问是否要保存密码,如果是写入配置文件

 

41.实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式的计算器程序

 

Python基础题(二)

标签:and   闭包   dll   元组   组织   sts   二分法   统计   atm   

原文地址:https://www.cnblogs.com/596014054-yangdongsheng/p/9702643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!