python18-day5

递归

1.必须有明确结束条件

2.每次进入递归,问题必须比上一次缩小

3.效率不高,递归层数过多就导致栈(内存)溢出

递归=递推+回溯

递归默认层数1000层

import sys
print(sys.getrecursionlimit())          #看递归最大值
#1000
print(sys.setrecursionlimit(100000))    #更改递归最大值为100000
print(sys.getrecursionlimit())          #再次查看
#100000

实例:查年龄

#题目:共5人,已知我18岁,求第5人年龄
#如果n不等于1 执行递推(5-1)+2=(4-1)+2= (3-1)+2=(2-1)+2=1
# 现在1=n执行 执行回溯2+2+2+2+18=26
def age(n):
    if n==1:
        return 18
    return age(n-1)+2
print(age(5))
#26

二分法

#从N个有序数据中找到想要的值,注:无序不能查找

data = range(1,4200000000)                          #定义一个1至4200000000的数
def binary_search(find_str,data_set,count):
    mid = int(len(data_set)//2)                           #每次除以data长度的一半
    if data_set[mid] == find_str:                         #如果找到find_str(查找的值)
        print("find it",find_str,"查找次数",count)        #显示查找值和查找次数
    elif data_set[mid] > find_str:                        #如果值大于查找值
        print("在左边 ",data_set[mid],data_set[0:mid])    #显示当前值,显示查询范围
        binary_search(find_str,data_set[0:mid],count+1)   #再次递归,在查询范围中再次查询,计数器+1
    else:                                                 #如果值小于查找值
        print("在右边 ",data_set[mid], data_set[mid+1:])  #显示当前值,显示查询范围
        binary_search(find_str, data_set[mid+1:],count+1) #再次递归,在查询范围中再次查询,计数器+1
binary_search(13354240, data,0)                           #13354240是查找数 调用data函数值,0是计数器

模块调用

模块的搜索顺序: 内存--内置--sys.path(环境变量)

导入模块要做的3件事

1.创建新的作用域

2.在该作用域中执行顶级代码

3.得到一个模块名,绑定到该模块内的代码

#模块更新不会影响到已经使用的文件,因为文件之前已经把该模块写入到内存,

#模块导入一次就导入到内存,多次导入只是从内存中读取

定义模块 python文件名是spam

__all__=["money","read1"] #本模块中能这调用money和read1,只针对from ... ipmprt * 形式,
aa=("form modue  spam")
money=100
money1=10000
def read1():
    print(money)
def read2():
    print(money1)
if __name__=="__main__":
#如果条件成立,可继续写条件操作,主要用于测试环境测试该脚本
#__name__是本文件的名字 __main__是以脚本形式调用的该文件
#如果__name__的值不是__main__,说明该文件是被当做模块调用的形式使用
    print("该文件被当做脚本文件执行"

新建立个python,作用:调用上边的模块

import

#直接调用模块
import spam           #调用模块
import spam as sm     #定义spam别名为sm
print(spam.aa)        #显示模块中的aa变量
#form modue  spam
print(sm.aa)          #显示模块中的aa变量
#form modue  spam
spam.read1()          #调用模块中的函数
#100

from ... import ...

#调用指定模块的变量或函数,调用时不用指定模块名
from spam import read1,aa        #调用spam模块的read1函数和aa变量
#from spaa import read1           #注意不同模块的同名函,下边模块中函数会覆盖上边模块中函数
from spam import read1 as read   #创建别名,如此调用spam的read1就使用read就和spaa不冲突了
read1()
#100
print(aa)
#form modue  spam

#注意,如果在本文件中定义函数read1 会显示本文件中的函数,而不是模块中的read1
def read1():
    aa=("aa11")
    return aa
print(read1())
#aa11

from ... import  *

#调用sapm模块总不以_开头的名字,全部可调用
#建议不用,因为不知道模块中的值是否会和本文件冲突,
#如果要用看模块调用的__all__ 可以错开这个问题(看上边的定义模块)
read1()
#100
print(money)
#100
print(money)    #会报错 因为在模块中定义了__all__

包针对模块导入的功能

包(目录)是一种通过使用模块名来组织python模块名称空间的方式

模块导入的时候,只要是遇到"."的都是包导入,注"."的左边边必须是一个包(目录)

__init__

作用:初始化包的代码,

#只要导入包,就会依次执行包下的__init__py文件,再执行包下的py文件或包下的子包
#__init__.py默认创建, __init__.py可以为空,也可以存放初始化包的代码

#__init__同级有cc.py

__all__=["cc","money","read1"] #可以使用cc.py,money变量,dd函数,只针对from ... ipmprt * 形式,
print("==hello==")
x=1
money=100
money1=1000
def dd():
    print(money)

import 导入

主要用途导入内置模块
import aa.db.cc                    #.的左边必须是包 aa和db是包 cc是py文件
aa.db.cc.dd()                      #dd是函数
# import aa.db.cc as e             #cc创建别名为e
# e.dd()                           #再次调用e.py,不用写路径

from..import...模式导入

绝对路径导入和相对路径导入

#主要用于导入自己创建子包,
#针对form后import导入模块,必须不能带.(点),否则会语法错误
#例如from aa.db import cc.dd (dd文件和dd函数同时在import后边就会报错)

#这是绝对路径导入(cc.py文件可以调用db包下其他py文件,import模式就需要加入path路径)
from aa.db.cc import dd   #dd是cc.py下的函数
dd()
#这是相对导入(..是上层目录,就是调用上层目录下的db包的cc.py文件)
from ..db.cc import dd
dd()

#单独导入    #当前目录导入
from .db import cc    #当前目录导入, 和db在同级目录,调用cc.py

软件目录开发规范

item     #程序主体

  bin    #存放执行脚本

  conf   #配置文件

  core     #核心逻辑

  db    #db存放

  lib    #存放自定义的模块与包

  log   #存放日志

log日志模块

时间: 2024-10-02 01:01:19

python18-day5的相关文章

Python实战之路-day5

生活在于改变,改变自己的生活需要勇气,改变自己的目标更需要勇气.  Hello Python - day5! MVC心法 针对存储端(M)的数据进行增删改查 入库:V端通过HTML.CSS.JS的数据通过GET.POST发送请求,C端(python)通过request.form.get()或request.args.get()接受V端的数据,格式化通过列表.字典.字符串结合python语法存储到M端 出库:V端发送get请求数据,C端python通过request.args.get()拿到get

day5模块学习 -- os模块学习

python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- 另外,os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,额...我擦,我还真不知道,(甭管怎么着,肯定不是pwd),这时候我们使用python中os模块的os.path.abspath

Python学习day5作业-ATM和购物商城

Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆,用户间转帐 支持多用户 管理员可添加账户.指定用户额度.冻结用户等 购物车: 商品信息- 数量.单价.名称 用户信息- 帐号.密码.余额 用户可充值 购物历史信息 允许用户多次购买,每次可购买多件 余额不足时进行提醒 用户退出时 ,输出当次购物信息 用户下次登陆时可查看购物历史 商品列表分级显示 1

Python实战作业-day5

作业需求: 用户登录注册页面 首页.注册页面.登录页面:后端存储数据是mysql数据库 作业代码: 1 [email protected]~/reboot15/day5/homework$cat app.py 2 #!/usr/bin/env python 3 #coding:utf-8 4 ''' 5 作业需求: 6 基于mysql数据库实现用户登录模块,并实现针对于用户信息的增删改查 7 ''' 8 9 10 from flask import Flask,render_template,r

吉林省2017年冬令营DAY5

DAY5 图论 最短路径,最小生成树,拓扑排序,连通分量,二分图. 总的来说,day5这一天讲的东西听得不怎么明白,准备冬令营过后回去慢慢理解. 首先讲的是邻接矩阵 假如有n个点,则建立一个n*n的二维数组,在i行的j位上做一个标记表示i与j连通. 第二点讲的是链式前向星 当天听的时候,听得很不明白,后来听大佬讲了一下,上网搜索了一些资料,还算是懂了些. 先建立一个_edge结构体,内含{to,next,val},一个Head[]数组,一个计数器tot 1 #define MX 10000 2

初学python之day5

一.python学习之模块: 1.模块的本质: 模块的本质就是用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能).py结尾的python文件 2.模块的使用方法: import +文件名                  如:import test1                                              (文件名一定不要加.py) 导入多个文件则为 import+文件名,文件名         如import test1,test2 fro

python小白-day5 os模块

os模块 提供对操作系统进行调用的接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import os print('getcwd()',os.getcwd()) #获取当前工作目录,即当前python脚本工作的目录路径 #os.chdir("dirname")  #改变当前脚本工作目录:相当于shell下cd print('curdir',os.curdir) 

python基础学习日志day5

学习内容 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 一:模块介绍 模块分为三种: 自定义模块 内置标准模块(又称标准库) 开源模块 自定义模块使用 # -*- coding:utf-8 -*- __author__ = 'shisanjun' """ d

iOS网络编程——Day5(使用MVC开启阿帕奇)

一.使用xml获取数据 1.写xml文件 树形结构 根节点 (1).<?xml version="1.0" encoding = "utf-8" ?> (2).设置根节点 (3).设置子节点,子节点名称一样,直接复制 (4).设置子节点标签,复制 (5).键入标签内容 2.使用终端 (注意:在 Unix系统中是区别大小写字符的,A.txt 不等于 a.txt.) (1)打开终端:control+空格 -> ter->enter (默认进入用户

java之day5

温故 package day5; import java.util.Scanner; public class Score { //构造函数(不管写不写,都有这个函数,隐藏着) public Score(){ System.out.println("实例化对象调用了我"); } int sum;//和 double avg;//平均分 //一个方法只能return一个值 //求和的方法 下面int是返回值的类型 public int sum(){ Scanner scanner = n