红黑树

tree

Posted by Jow on July 1, 2019

目录

  1. 变量
  2. 字符串
  3. 数字
  4. 列表
  5. if语句
  6. 字典
  7. 用户输入和循环
  8. 函数
  9. 文件和异常
  10. 测试函数

解决问题的方法有很多种,在效率和时间之间取其平衡。

变量

Python变量的命名一般使用字母数字以及下划线,开头只能是字母或者下划线。

字符串

接下来介绍第一种数据类型,字符串,在任何一种语言中,字符串都是一个非常常用的数据类型,接下来我们主要记录字符串的使用注意事项,以及常用的字符串处理函数。

  1. title() : 首字母大写
  2. upper():全部大写
  3. lower():全部小写
  4. 使用 ‘+’ 合并拼接字符串
  5. 使用制表符和换行符添加空白’\t \n’
  6. strip():删除两端空白
  7. rstrip():删除右边空白
  8. lstrip():删除左边空白
  9. 在使用字符串的时候,如果字符串中包含单引号,定义的字符串最好使用双引号
  10. str(param):强制类型转换

数字

在数字相关的内容中,包含整数和浮点数

在Python中,两个乘号表示乘方运算。

浮点数最好不要用来进行等号的比较,因为在所有的语言中,浮点数的存储都不是很精确。

字符串拼接数字,最好对数字进行强制类型转换。

Python中使用 ‘#’ 进行注释

列表

在Python中,使用方括号来表示列表,并用逗号来分隔其中的元素。

1
2
bicycles = ['trek','dfd','fte','wad','hre','tws']
print(bicycles[0]) #trek

python中,列表的访问下表从0开始,从最后以为开始访问 ,-1表示访问最后以为元素,前面的以此类推。

列表的修改,可以直接对列表中的值进行修改。

往列表中,添加元素:

  1. append(param) 在末尾添加元素
  2. insert(index,param) 往指定位置添加元素

删除列表中的元素:

  1. del bicycles[0] 删除指定列表中的指定元素
  2. pop() 列表中的最后一个元素,并返回
  3. pop(index) 删除指定位置的元素,并返回
  4. remove(value) 根据值进行删除

组织列表

  1. sort() 对列表进行排序,该变了列表,可带参数reverse,反向
  2. sorted 不改变列表 ,可带参数reverse,反向
  3. reverse() :函数表示倒置
  4. len(list) :返回列表长度

操作列表:

  1. for item in items:
  2. 创建数值列表: range(1,5) 左闭右开: for value in range(1,5),其中使用list函数可以直接将range函数的结果转换成list
  3. min,max,sum求数值列表的统计计算
  4. 列表解析 squares = [value ** 2 for value in range(1,11)],它会将for循环和创建新元素的代码合并成一行,并自动附加新元素。
  5. 切片: squares[0:3] 获取squares中的0到3的元素。[1:],[:],[-3:],1到最后,全部,倒数第三到最后一个。
  6. 利用切片可以进行列表的深拷贝,切片返回的是另一片存储空间的值

与列表很相近的就是元组,使用小括号进行表示,但是小括号里面的值不放发生改变

if语句

  1. ==:相等
  2. !=:不等
  3. and 同时满足
  4. or 或者
  5. 检查特定元素是否在列表中,使用in,不在使用not in。
  6. 确认列表不是空的,直接if列表就可以。
1
2
3
4
5
6
7
8
if condition :
	语句
else:
	语句
items = ["a","b","c"]
if	"a" in items:
if "a" not in items:

字典

在Python中,字典非常想lua中的table。使用大括号括起来的键值对。

  1. 字典.items(),可以同时得到key值和value值。
  2. keys(),访问key值。
  3. values(),访问value值,给values加上函数set(),集合函数,不会出现重复的值
  4. 字典类似于table可以进行嵌套

用户输入和循环

使用input来提示用户输入信息,返回的值可以存在一个变量内。

1
2
message = input("please input:)
print(message)

在循环方面除了可以使用for以外,我们还可以使用while,while里面可以使用break和continue。

while和列表可以配套使用,while key值 in list: 进入循环。

函数

在Python函数的定义使用 def funName(): 其中括号中可以带参数。

关于参数的传递,除了位置实参之外还可以使用关键字实参,即为了让形参取到正确的值,除了让实参的顺序对应上形参的顺序之外,还可以使用,键值对的方式,键值是形参的名字,值就是实参。

在Python中,可以给参数默认值,但是一般带默认值的形参都要放到参数的最后。

在Python中,使用return返回任意类型的数值。

*参数名 :传递任意数量的实参。这是任意数量的实参会被放到这个‘参数名’中,这个参数名是一个元组。

**参数名:创建一个空的字典,将参数中的键值对实参放到里面去。

模块的导入:

import 文件名 导入整个文件

from moduleName import functionName 导入某个模块的某个函数

from moduleName import functionName as newName 给导入的函数重新命名,同样也可以给模块重新命名

from moduleName import * 导入模块内的所用函数

不推荐导入一个模块快的所有函数,在这里导入真个模块我们可以通过模块名加点来访问其中的函数,但是直接导入的函数,就类似于把这个函数直接写到了这个模块,这样可能会引起函数命名相同,导致意料之外的错误。

1
2
3
4
5
6
7
8
9
10
11
class Dog():
	def __init(self,name,age)
		self.name = name
		self.age = age
	
	def sit(self)
		print(self.name.title() + " is sitting now.")

class GoldenDog(Dog)
	def __init__(self,name,age)
		super().__init__(name,age)

在Python中,类的首个字母要大写。

其中__init__方法是类的构造函数,加上两个下划线是表示这是Python中的默认方法和普通方法做个区分。

在定义方法的时候,会默认加上self参数,这个表示类本身。

类的创建,直接调用类名(参数):这里面的参数不用传递self。

访问属性或者调用方法,对象点就可以访问。

在使用继承的时候,需要在括号中加上父类,并且在构造函数中,通过super()函数来调用父类的构造函数。

一个模块里面可以写多个类,所以导入类和导入方法类似。可以同时的导入多个类。

文件和异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
with open(filepath) as file_object:
	contents = file_object.read()
	print(contents)
	for line in file_object:
		print(line)
	lines = file_object.readlines()
	# liens是一个列表

with open(filepath,'w') as fileObject: # 全部重新写入
	fileObject.write("i love programming")

with open(filepath,'a') as fileObject: # 附加写入
	fileObject.write("i love programming")

# 异常的捕捉,异常的使用可以避免程序崩溃
try:
	code
except error:
	code

在分析文件的时候可以使用split()函数来对字符串进行分割。

数据的存储使用 json.dump() 和 json.load()

dump函数有两个参数一个是 数据,另一个是文件路径,load的参数就是文件路径,然后将文件内容加载就好。

测试代码

1
2
3
4
5
6
import unittest
from nameFunction import getName
class NamesTestCase(unittest.TestCase):
	def test_first(self):
		formatName = getName("janis","jopin")
		self.assertEqual(formatName,"Janis Jopin")

各种断言的方法:

  1. assertEqual(a,b)
  2. assertNotEqual(a,b)
  3. assertTrue(x)
  4. assertFalse(x)
  5. assertIn(item,list)
  6. assertNotIn(item,list)

boss

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by jow.
--- DateTime: 2018/12/24 23:33
---

local m = 7
local p = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 }
local q = { 1, 1, 1, 1, 1, 1, 1 }

local e = {}
 
local cal
cal = function(p, q)
    local dim = q
    if #dim == 1 then
        if dim[1] == 0 then
            return 0
        elseif dim[1] == 1 then
            return 1 / p[1]
        else
            if e[{ p, { dim[1] - 1 } }] then
                return p[1] * e[{ p, { dim[1] - 1 } }]
            end
            return p[1] * cal(p, { dim[1] - 1 })
        end
    end
    local downDim = {}
    local dowmP = {}
    for i, v in ipairs(dim) do
        if v ~= 0 then
            table.insert(downDim, v)
            table.insert(dowmP, p[i])
        end
    end
    local eC = 0
    for i, v in ipairs(downDim) do
        local temp = {}
        for i, v in ipairs(downDim) do
            table.insert(temp, v)
        end
        temp[i] = v - 1
        if e[{ dowmP, temp }] then
            eC = eC + 1 / dowmP[i] + e[{ dowmP, temp }]
        else
            eC = eC + 1 / dowmP[i] + cal(dowmP, temp)
        end
    end
    e[{ dowmP, downDim }] = eC
    return eC
end

print(cal(p, q))