三个引号

今昨两天,真是被markdown的模版折腾的够呛啊,先说下现在的项目吧,现在RD提测时是要很土在mr上的comment上写,而我们的arctic-ocean,可以将评论的内容调用gitlab的接口,自动提交评论并且发送邮件, 技术上有一点要求将提交的内容变成markdown的格式,再调用gitlab的接口。
首先我先了解了一下Markdown的语法,看怎么可以写成表格

1
2
3
4
5
| project_name | project_function | system_involved |   
| -------- | -------- | --------|
| cell 1 | cell 2 | cell3 |
| project_name | project_function | system_involved |
| -------- | -------- | --------|

于是我很费劲的写成了这样:

1
2
3
4
5
6
body1 = '|'+ 'project_name' +'|'+ 'project_function'+ '|'+'system_involved'+'|'+'database_   
changes'+'|'+'permissions_modify'+'|'+'people_concerned'+'|'+'testing_concerns'+'|'+'scheduled_launch_
time'+'|'+'remind_somebody'+'|' +'\n'+'|'+'--------'+'|'+'--------'+'|'+'--------'+'|'+'--------'+'|'
+'--------'+'|'+'--------'+'|'+'--------'+'|'+'--------'+'|'+'--------'+'|'+'\n'+'|'+ project_
name+'|'+project_function+'|'+system_involved+'|'+database_changes+'|'+permissions_modify+'|'+people_
concerned+'|'+testing_concerns+'|'+scheduled_launch_time+'|'+remind_somebody+'|

就是这样用字符串拼接的方式,虽然能够实现功能,但是真的不好些,而且也不好看,马越看后,先是让我写成一个模版,即建立一个新的文件,然后
import,这是一方面,更重要的是体会到了三个引号的强大,完全可以想如下这样写啊。三个引号是可以保留空行的,当马越跟我说可以这样的时候,
瞬间一阵风吹来似的,自己好蠢的写了好久,结果其实是可以直接复制过来的。

# coding: utf-8
comment_template = u'''\
| header 1 | header 2 |
| -------- | -------- |
| 测试项目名称 | {project_name}|
| 测试功能 | {project_function}|
| 提测涉及系统 | {system_involved} |
| 是否有数据库修改 | {need_to_change_db_schema}|
| 是否有权限修改 | {need_to_change_permissions} |
| 涉及人员 | {developers} |
| 测试关注点 | {checking_point} |
| 计划上线时间| {scheduled_launch_time} |
| 提醒某人 | {remind_somebody} |'''

view中这样:用string.format()

body = template.comment_template.format(
            project_name=project_name,
            project_function=project_function,
            system_involved=system_involved,
            need_to_change_db_schema=need_to_change_db_schema,
            need_to_change_permissions=need_to_change_permissions,
            developers=developers,
            checking_point=checking_point,
            scheduled_launch_time=scheduled_launch_time,
            remind_somebody=remind_somebody)

level-test总结

来公司实习的第五天,马越给我布置了一个新项目,功能:家长输入手机号,点击进入开始答题,点击提交,服务器把成绩,手机号,成绩,开始时间,结束时间,记录在mysql数据库中,难点主要是怎么样确保是在某一个确定的手机号上答题,马越让我先了解了一下cookie,把手机号,成绩,起始结束时间都放在cookie当中。

首先是在database中建立一个dev.sql,我模仿着IT-Test的样子,建立了level_test_result表,
在提交之前,先把虚拟环境搭好 测试和格式看是否可以通过在提交
virtualenv venv
source venv/bin/activate
make pip
cp .env.example .env 把.env 中的参数配置好
make test
make lint
使用honcho start可以将程序跑起来
然后提交,提交时用的命令:
git status看看有哪些修改过却没有add的
git add
git commit 这条命令会进入vim模式 写一些问题和解决之类的描述
git push origin master -f(之后建立了dev分支)
打开gitlab 添加一个request,然后把它再填入mr,提交,@mayue,这样他会检查是否可以通过
如果马越那里有了新的改进,那么首先是要先git remote add upstream
git fetch upstream
git rebase upstream/master
第一次提交肯定是有各种问题啦。。。在耐心的马越的指导下,我进行了修改,这次建表遇到的坑有:表名起名为level_test_result,mobile是varchar型,起始结束时间是timestamp NOT NULL
好啦,第一次提交通过了,因为commit了好几次,马越说让我把他合为一次
git log
把最先commit的那个之前的一个复制下来,
git rebase -i <之前复制的那个>
进入vim模式,把之后commit的前面的改为s
git push origin dev -f
接下来实现第二步
首先写model层
这里主要是一些命名规则需要注意
然后写test_level_test_result.py 做测试用的
assert是断言的意思
今天是周六,应该会写view层。。。

git使用总结

git命令总结

今天是马越布置给我的第一个任务,在这之前他先跟我说了一些git的常用命令,让我自己下来学习一下,那么我现在就总结一下目前掌握的一些git命令吧
git fork
git clone
git checkout
git remote
git fetch

一、git clone 从远程主机克隆一个版本库

二、git remote 管理主机名

为了便于管理,Git要求每个远程主机都必须指定一个主机名
git remote show <主机名>
git remote add <主机名> <网址> 添加远程主机
git remote rm <主机名> 删除远程主机

# 三、git fetch
一旦远程主机的版本库有了更新(commit),需要将这些更新取回本地,这时候就要用到git fetch 命令
git fetch <主机名> 将某个远程主机的更新,全部取回本地
git fetch 通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响

排序总结

排序算法的总结(python实现)

冒泡排序

冒泡排序:是一种交换排序,他的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。最好的情况下,时间复杂度是n,最坏的时间复杂度时n^2

1
2
3
4
5
6
def Bubble(list):
for i in range(len(list))[::-1]:
for j in range(i):
if list[j]>list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
return list

Read More

leetcode 121

121. Best Time to Buy and Sell Stock

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.


class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        maxnum=0
        if len(prices)<=1:
            return 0
        minnum=prices[0]
        for i in range(len(prices)):
            minnum=min(minnum,prices[i])
            maxnum=max(maxnum,prices[i]-minnum)
        return maxnum

leetcode 88

88. Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.


class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        while m>0 and n>0:
            if nums1[m-1]>=nums2[n-1]:
                nums1[m+n-1]=nums1[m-1]
                m-=1
            else:
                nums1[m+n-1]=nums2[n-1]
                n-=1
        nums1[:n]=nums2[:n]

每一次把最后一个元素排好

leetcode 169

169. Majority Element

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.


class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return nums[len(nums)/2]

先排序,因为题目说了这个大多数一定存在 那么这个数一定在中间位置上,用心体会,感觉很巧妙!

leetcode 217

217. Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array,and it should return false if every element is distinct.


class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        return len(set(nums))<len(nums)