作者归档:tianyuan

二分法查找

检查长度为n的列表,二分查找需要进行log n 次操作,使用大O表示法即O(log n)

def binary_search(list, item):
    """
    二分查找
    :param list:
    :param item:
    :return:
    """
    low = 0
    high = len(list) - 1

    while low <= high:
        mid = int((low + high) / 2)
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None


list = [1, 3, 5, 7, 9, 12]

print(binary_search(list, 12))

git常用命令学习笔记

初始化git仓库

git init

把文件添加进版本库

git add 1.txt

把文件提交到版本库

git commit -m 'add 1.txt'

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

继续阅读

pycookbook-数据结构

解压序列赋值给多个变量

In [32]: b = ['qwe','asd']

In [33]: q,a = b

In [34]: a
Out[34]: 'asd'

In [35]: q
Out[35]: 'qwe'

如果变量数跟序列元素数不一致,会出现异常

In [36]: q,a,z = b
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-5bedc90bd5b2> in <module>()
----> 1 q,a,z = b

ValueError: not enough values to unpack (expected 3, got 2)

继续阅读

python里面如何拷贝一个对象

  • 赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个;
  • 浅拷贝(copy.copy()),创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另一个也会被改变);

  • 深拷贝(copy.deepcopy()),创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另一个不会改变)

继续阅读

正确理解python中的None

Python中以下数据会被当做 来处理:

  • 常量 None

  • 常量 False

  • 任何形式的数值零 如 0,0.0,0L,0j

  • 空的序列如 ”,(),[]

  • 空的字典如 {}

  • 当用户定义的类中定义了 nonzero()和len()方法,且该方法返回整数0或者布尔值False时

其中 None 的特殊性体现在它既不是0,False,也不是空字符串
它就是一个空值对象

In [10]: type(None)
Out[10]: NoneType

所有赋值为None的变量都相等,None与任何其他非None的对象比较结果都为False

In [12]: a = []

In [13]: a is None
Out[13]: False

In [14]: a == None
Out[14]: False

所以我们不能用None判断 列表为空
下面是正确方法

In [15]: a
Out[15]: []

In [16]: if a:
    ...:     print("a is not empty")
    ...: else:
    ...:     print("a is empty")
    ...:
a is empty

github报错failed to push some refs to ‘git

$ git push origin master
Warning: Permanently added the RSA host key for IP address '192.30.253.112' to the list of known hosts.
To git@github.com:Tuesdday/pythoncode.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:Tuesdday/pythoncode.git'
#提交代码时报错
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

继续阅读

Flask下拉列表与数据库同步问题解决记录

刚开始 我的表单是这么写的

forms.py:

tags = Tag.query.all()

class MovieForm(FlaskForm):
    """电影表单"""
    tag_id = SelectField(
        label="标签",
        validators=[DataRequired("请选择标签")],
        description="标签",
        coerce=int,
        choices=[(v.id, v.name) for v in tags],
        render_kw={"class": "form-control"}
    )

在表单类之外 先执行 查询标签的 动作 tags = Tag.query.all(),但是我发现我在另外一个页面添加标签成功之后,返回在电影添加页面 进行tag选取时,下拉框中出现的内容并没有刚才新添加的tag,
怀疑是tags = Tag.query.all()这条语句并没有被调用

继续阅读

FlaskForm自定义验证函数

这是一个用户注册的视图函数:

@home.route("/register/", methods=["GET", "POST"])
def register():
    form = RegisterForm()

    if form.validate_on_submit():
        data = form.data
        user = User(
            name=data["name"],
            email=data["email"],
            phone=data["phone"],
            pwd=generate_password_hash(data["pwd"]),
            uuid=uuid4().hex
        )
        db.session.add(user)
        db.session.commit()
        flash("注册成功", "ok")

用户注册时 怎么验证用户名或者邮箱已经存在呢?

继续阅读