# ECDFs stat Empirical cumulative distribution functions

In this exercise, you will write a function that takes as input a 1D array of data and then returns the x and y values of the ECDF.  ECDFs are among the most important plots in statistical analysis. You can write your own function, foo(x,y) according to the following skeleton:

def foo(a,b):
"""State what function does here"""
# Computation performed here
return x, y


The function foo() above takes two arguments a and b and returns two values x and y. The function header def foo(a,b): contains the function signaturefoo(a,b), which consists of the function name, along with its parameters.

Define a function with the signature ecdf(data). Within the function definition,

• Compute the number of data points, n, using the len() function.
• The xx-values are the sorted data. Use the np.sort() function to perform the sorting.
• The yy data of the ECDF go from 1/n to 1 in equally spaced increments. You can construct this using np.arange() and then dividing by n.
• The function returns the values x and y.

def ecdf(data):
"""Compute ECDF for a one-dimensional array of measurements."""

# Number of data points: n
n=len(data)

# x-data for the ECDF: x
x=np.sort(data)

# y-data for the ECDF: y
y=np.arange(1,n+1)/n

return x, y

# 30 days of code https://www.hackerrank.com

## Day 6

Given a string,S , of length N  that is indexed from 0 to N-1, print its even-indexed and odd-indexed characters as 2 space-separated strings on a single line (see the Sample below for more detail).

Note: is considered to be an even index.

Sample Input

2
Hacker
Rank


Sample Output

Hce akr
Rn ak

My code

# Enter your code here. Read input from STDIN. Print output to STDOUT
x=int(raw_input())

for i in range(x):
d=raw_input()
a='';b=''
for i in range(0,len(d),2):
a+=d[i]
print a,

for i in range(1,len(d),2):
b+=d[i]
print b,

print ''

t = int(raw_input())
for _ in range(t):
line = raw_input()
first = ""
second = ""

for i, c in enumerate(line):
if (i & 1) == 0:
first += c
else:
second += c
print first, second

## Day 8

Sample Input

3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry


Sample Output

sam=99912222
harry=12299933

# Enter your code here. Read input from STDIN. Print output to STDOUT
x=raw_input()
y={}
for i in range(int(x)):
k=raw_input()
y[k.split(' ')[0]]=k.split(' ')[-1]

while True:
try:
c=raw_input()
except:
c=0
if c:
try:
print c+'='+y[c]
except:
else:
break

official

Python3
import sys

# Read input and assemble Phone Book
n = int(input())
phoneBook = {}
for i in range(n):
contact = input().split(' ')
phoneBook[contact[0]] = contact[1]

# Process Queries
for i in lines:
name = i.strip()
if name in phoneBook:
print(name + '=' + str( phoneBook[name] ))
else:
print('Not found')

## Day 12: Inheritance

class Person:
def __init__(self, firstName, lastName, idNumber):
self.firstName = firstName
self.lastName = lastName
self.idNumber = idNumber
def printPerson(self):
print "Name:", self.lastName + ",", self.firstName
print "ID:", self.idNumber

class Student(Person):
def __init__(self, firstName, lastName, idNum ,scores):
Person.__init__(self, firstName, lastName, idNum)
self.scores=scores

def calculate(self):
avg = sum(scores) / len(scores)
if (90 <= avg <= 100):
if (80 <= avg < 90):
if (70 <= avg < 80):
if (55 <= avg < 70):
if (40 <= avg <= 55):
if (avg < 40):

line = raw_input().split()
firstName = line[0]
lastName = line[1]
idNum = line[2]
numScores = int(raw_input()) # not needed for Python
scores = map(int, raw_input().split())
s = Student(firstName, lastName, idNum, scores)
s.printPerson()
print "Grade:", s.calculate()

## Day 14: Scope

The absolute difference between two integers

class Difference:
def __init__(self, a):
self.__elements = a

def computeDifference(self):
self.maximumDifference = max([a-b for a in self.__elements for b in self.__elements])

# End of Difference class

_ = raw_input()
a = [int(e) for e in raw_input().split(' ')]

d = Difference(a)
d.computeDifference()

print d.maximumDifference

class Node:
def __init__(self,data):
self.data = data
self.next = None
class Solution:
while current:
print current.data,
current = current.next

else:
while True:
if(current.next == None):
current.next = Node(data)
break
current = current.next

mylist= Solution()
T=int(input())
for i in range(T):
data=int(input())
mylist.display(head);

# coding in Python

1.Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?

def unique(string):
# Assuming character set is ASCII (128 characters)
if len(string) > 128:
return False

char_set = [False for _ in range(128)]
for char in string:
val = ord(char)
if char_set[val]:
# Char already found in string
return False
char_set[val] = True

return True

2.Check palindrome

def is_palindrome(n):
n=str(n)
m=n[::-1]
return n==m

3. Fibonacci

a,b = 0, 1
while b<100:
print (b),
a, b = b, a+b


4. how do I iterate over a sequence in reverse order

for x in reversed(sequence):
... # do something with x..

for i in range(len(sequence)-1, -1, -1):
x = sequence[i]
<do something with x>

5.Python是如何进行类型转换的？

函数                      描述
int(x [,base ])         将x转换为一个整数
long(x [,base ])        将x转换为一个长整数
float(x )               将x转换到一个浮点数
complex(real [,imag ])  创建一个复数
str(x )                 将对象 x 转换为字符串
repr(x )                将对象 x 转换为表达式字符串
eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s )               将序列 s 转换为一个元组
list(s )                将序列 s 转换为一个列表
chr(x )                 将一个整数转换为一个字符
unichr(x )              将一个整数转换为Unicode字符
ord(x )                 将一个字符转换为它的整数值
hex(x )                 将一个整数转换为一个十六进制字符串
oct(x )                 将一个整数转换为一个八进制字符串

6. 请写出一段Python代码实现删除一个list里面的重复元素

l = [1,1,2,3,4,5,4]
list(set(l))
[1, 2, 3, 4, 5]

d = {}
for x in mylist:
d[x] = 1
mylist = list(d.keys())

7.介绍一下Python中webbrowser的用法？

webbrowser模块提供了一个高级接口来显示基于Web的文档，大部分情况下只需要简单的调用open()方法。
webbrowser定义了如下的异常：
exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常
webbrowser有以下方法：
webbrowser.open(url[, new=0[, autoraise=1]])

webbrowser.open_new(url)

webbrowser.open_new_tab(url)

webbrowser.get([name]) 根据name返回一个浏览器对象，如果name为空，则返回默认的浏览器
webbrowser.register(name, construtor[, instance])

8. (1)python下多线程的限制以及多进程中传递参数的方式
python多线程有个全局解释器锁（global interpreter lock），这个锁的意思是任一时间只能有一个线程使用解释器，跟单cpu跑多个程序一个意思，大家都是轮着用的，这叫“并发”，不是“并行”。

(2)python多线程与多进程的区别

• 在UNIX平台上，当某个进程终结之后，该进程需要被其父进程调用wait，否则进程成为僵尸进程(Zombie)。所以，有必要对每个Process对象调用join()方法 (实际上等同于wait)。对于多线程来说，由于只有一个进程，所以不存在此必要性。
• 多进程应该避免共享资源。在多线程中，我们可以比较容易地共享资源，比如使用全局变量或者传递参数。在多进程情况下，由于每个进程有自己独立的内存空间，以上方法并不合适。此时我们可以通过共享内存和Manager的方法来共享资源。但这样做提高了程序的复杂度，并因为同步的需要而降低了程序的效率。

9.Python是如何进行内存管理的？
http://developer.51cto.com/art/201007/213585.htm
Python引用了一个内存池(memory pool)机制，即Pymalloc机制(malloc:n.分配内存)，用于管理对小块内存的申请和释放

python中的内存管理机制——Pymalloc：
python中的内存管理机制都有两套实现，一套是针对小对象，就是大小小于256bits时,pymalloc会在内存池中申请内存空间；当大于256bits，则会直接执行new/malloc的行为来申请内存空间。

10.什么是lambda函数？它有什么好处?
http://www.kuqin.com/diveinto_python_document/apihelper_lambda.html
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。 lambda 函数不能包含命令，它们所包含的表达式不能超过一个。不要试图向lambda 函数中塞入太多的东西；如果你需要更复杂的东西，应该定义一个普通函数，然后想让它多长就多长。

11.Python如何实现单例模式？其他23种设计模式python如何实现？

#使用__metaclass__（元类）的高级python用法
class Singleton2(type):
def __init__(cls, name, bases, dict):
super(Singleton2, cls).__init__(name, bases, dict)
cls._instance = None
def __call__(cls, *args, **kw):
if cls._instance is None:
cls._instance = super(Singleton2, cls).__call__(*args, **kw)
return cls._instance

class MyClass3(object):
__metaclass__ = Singleton2

one = MyClass3()
two = MyClass3()

two.a = 3
print one.a
#3
print id(one)
#31495472
print id(two)
#31495472
print one == two
#True
print one is two
#True

12.Python里面如何拷贝一个对象？
http://blog.csdn.net/sharkw/article/details/1934090

13.介绍一下except的用法和作用？
Python的except用来捕获所有异常，因为Python里面的每次错误都会抛出一个异常，所以每个程序的错误都被当作一个运行时错误。

14.Python中pass语句的作用是什么？
pass语句什么也不做，一般作为占位符或者创建占位程序，pass语句不会执行任何操作

15.如何知道一个python对象的类型？
type()

16.介绍一下Python下range()函数的用法？
http://docs.python.org/library/functions.html#range
range(start, stop[, step])

17.如何用Python来进行查询和替换一个文本字符串？

replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数，指最大被替换的数量

18.Python里面search()和match()的区别？
match()函数只检测RE是不是在string的开始位置匹配，search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回，如果不是开始位置匹配成功的话，match()就返回none

19.用Python匹配HTML tag的时候，<.*>和<.*?>有什么区别？

20.Python里面如何生成随机数？
import random
random.random()

21.如何用Python来发送邮件？

python实现发送和接收邮件功能主要用到poplib和smtplib模块。

poplib用于接收邮件，而smtplib负责发送邮件。

#! /usr/bin/env python
#coding=utf-8
import sys
import time
import poplib
import smtplib
#邮件发送函数
def send_mail():
try:
handle = smtplib.SMTP('smtp.126.com',25)
msg = 'To: XXXX@qq.com\r\nFrom:XXXX@126.com\r\nSubject:hello\r\n'
handle.sendmail('XXXX@126.com','XXXX@qq.com',msg)
handle.close()
return 1
except:
return 0
#邮件接收函数
def accpet_mail():
try:
p=poplib.POP3('pop.126.com')
p.user('pythontab@126.com')
p.pass_('**********')
ret = p.stat() #返回一个元组:(邮件数,邮件尺寸)
#p.retr('邮件号码')方法返回一个元组:(状态信息,邮件,邮件尺寸)
except poplib.error_proto,e:
sys.exit(1)

#运行当前文件时，执行sendmail和accpet_mail函数
if __name__ == "__main__":
send_mail()
accpet_mail()

22.Python如何定义一个函数?

pycheck pylint24.如何在一个function里面设置一个全局的变量？
global25.有两个序列a,b，大小都为n,序列元素的值任意整形数，无序；

1. 分别计算a,b序列的和；
2. 求a序列和与b序列和的差值的一半，记为half；
3. 在和值大的序列中找出一个与和值小的序列中的元素max的差值最接近half的元素，记为min；
4. 将max与min互换即可。

26.如何用Python删除一个文件？

shutil模块有一个copyfile函数可以实现文件拷贝28.python程序中文输出问题怎么解决？

import os.path
import xlrd,sys

Filename=’/home/tom/Desktop/1234.xls’
if not os.path.isfile(Filename):
raise NameError,”%s is not a valid filename”%Filename

bk=xlrd.open_workbook(Filename)
shxrange=range(bk.nsheets)
print shxrange

for x in shxrange:
p=bk.sheets()[x].name.encode(‘utf-8′)
print p.decode(‘utf-8′)


1 reload(sys)
2 sys.setdefaultencoding(‘utf8′)

29.python代码得到列表list的交集与差集

1 b1=[1,2,3]
2 b2=[2,3,4]
3 b3 = [val for val in b1 if val in b2]
4 print b3

1 b1=[1,2,3]
2 b2=[2,3,4]
3 b3 = [val for val in b1 if val not in b2]
4 print b3

30.写一个简单的python socket编程
python 编写server的步骤：
1.

socket = socket.socket( family, type )

family参数代表地址家族，可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址，AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型，可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
2.

socket.bind( address )

3.

socket.listen( backlog )

backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后，这些请求需要排队，如果队列满，就拒绝请求。
4.

connection, address = socket.accept()

5.

6. 传输结束，服务器调用socket的close方法关闭连接。

python编写client的步骤：
1. 创建一个socket以连接服务器：socket = socket.socket( family, type )
2.使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下：

socket.connect( (host,port) )

host代表服务器主机名或IP，port代表服务器进程所绑定的端口号。如连接成功，客户就可通过套接字与服务器通信，如果连接失败，会引发socket.error异常。
3. 处理阶段，客户和服务器将通过send方法和recv方法通信。
4. 传输结束，客户通过调用socket的close方法关闭连接。

server.py

#coding:utf-8

import socket
if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)

while True:
try:
connection.settimeout(5)
buf = connection.recv(1024)
if buf == '1':
connection.send('welcome to server!')
else:
except socket.timeout:
print 'time out'

connection.close()

client.py

#coding:utf-8

import socket
import time

if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()

31.python如何捕获异常
（1）使用try和except语句来捕获异常

try:
block
except [exception,[data…]]:
block

try:
block
except [exception,[data...]]:
block
else:
block

（2）用raise语句手工引发一个异常:

raise [exception[,data]]

try:
raise MyError #自己抛出一个异常
except MyError:
print 'a error'

raise ValueError,’invalid argument’

（3）采用sys模块回溯最后的异常

1     import sys
2     try:
3        block
4     except:
5        info=sys.exc_info()
6        print info[0],":",info[1]



32.src = “security/afafsff/?ip=123.4.56.78&id=45″，请写一段代码用正则匹配出ip

pattern =

# Excel shortcuts (Chinese) tips

problemshortcut
0快捷键之在工作表中移动和滚动向上、下、左或右移动单元格箭头键
1移动到当前数据区域的边缘CTRL+ 箭头键
2移动到行首HOME
3移动到工作表的开头CTRL+HOME
4移动到工作表的最后一个单元格。CTRL+END
5向下移动一屏PAGE DOWN
6向上移动一屏PAGE UP
7向右移动一屏ALT+PAGE DOWN
8向左移动一屏ALT+PAGE UP
9移动到工作簿中下一个工作表CTRL+PAGE DOWN
10移动到工作簿中前一个工作表CTRL+PAGE UP
11移动到下一工作簿或窗口CTRL+F6 或 CTRL+TAB
12移动到前一工作簿或窗口CTRL+SHIFT+F6
13移动到已拆分工作簿中的下一个窗格F6
14移动到被拆分的工作簿中的上一个窗格SHIFT+F6
15滚动并显示活动单元格CTRL+BACKSPACE
16显示“定位”对话框F5
17显示“查找”对话框SHIFT+F5
18重复上一次“查找”操作SHIFT+F4
19在保护工作表中的非锁定单元格之间移动TAB
202>Excel快捷键之处于END模式时在工作表中移动
21打开或关闭 END 模式END
22在一行或列内以数据块为单位移动END, 箭头键
23移动到工作表的最后一个单元格.END, HOME
24在当前行中向右移动到最后一个非空白单元格。END, ENTER
253>Excel快捷键之处于“滚动锁定”模式时在工作表中移动
26打开或关闭滚动锁定SCROLL LOCK
27移动到窗口中左上角处的单元格HOME
28移动到窗口中右下角处的单元格END
29向上或向下滚动一行上箭头键或下箭头键
30向左或向右滚动一列左箭头键或右箭头键
314>Excel快捷键之用于预览和打印文档
32显示“打印”对话框CTRL+P
33在打印预览中时
34当放大显示时，在文档中移动箭头键
35当缩小显示时，在文档中每次滚动一页PAGE UP
36当缩小显示时，滚动到第一页CTRL+上箭头键
37当缩小显示时，滚动到最后一页CTRL+下箭头键
385>Excel快捷键之用于工作表、图表和宏
39插入新工作表SHIFT+F11
40创建使用当前区域的图表F11 或 ALT+F1
41显示“宏”对话框ALT+F8
42显示“Visual Basic 编辑器”ALT+F11
43插入 Microsoft Excel 4.0 宏工作表CTRL+F11
44移动到工作簿中的下一个工作表CTRL+PAGE DOWN
45移动到工作簿中的上一个工作表CTRL+PAGE UP
46选择工作簿中当前和下一个工作表SHIFT+CTRL+PAGE DOWN
47选择当前工作簿或上一个工作簿SHIFT+CTRL+PAGE UP
486>Excel快捷键之选择图表工作表
49选择工作簿中的下一张工作表CTRL+PAGE DOWN
50选择工作簿中的上一个工作表CTRL+PAGE UP，END, SHIFT+ENTER
517>Excel快捷键之用于在工作表中输入数据
52完成单元格输入并在选定区域中下移ENTER
53在单元格中折行ALT+ENTER
54用当前输入项填充选定的单元格区域CTRL+ENTER
55完成单元格输入并在选定区域中上移SHIFT+ENTER
56完成单元格输入并在选定区域中右移TAB
57完成单元格输入并在选定区域中左移SHIFT+TAB
58取消单元格输入ESC
59删除插入点左边的字符，或删除选定区域BACKSPACE
60删除插入点右边的字符，或删除选定区域DELETE
61删除插入点到行末的文本CTRL+DELETE
62向上下左右移动一个字符箭头键
63移到行首HOME
64重复最后一次操作F4 或 CTRL+Y
65编辑单元格批注SHIFT+F2
66由行或列标志创建名称CTRL+SHIFT+F3
67向下填充CTRL+D
68向右填充CTRL+R
69定义名称CTRL+F3
708>Excel快捷键之设置数据格式
71显示“样式”对话框ALT+' （撇号）
72显示“单元格格式”对话框CTRL+1
73应用“常规”数字格式CTRL+SHIFT+~
74应用带两个小数位的“贷币”格式CTRL+SHIFT+\$
75应用不带小数位的“百分比”格式CTRL+SHIFT+%
76应用带两个小数位的“科学记数”数字格式CTRL+SHIFT+^
77应用年月日“日期”格式CTRL+SHIFT+#
78应用小时和分钟“时间”格式，并标明上午或下午CTRL+SHIFT+@
79应用具有千位分隔符且负数用负号 (-) 表示CTRL+SHIFT+!
80应用外边框CTRL+SHIFT+&
81删除外边框CTRL+SHIFT+_
82应用或取消字体加粗格式CTRL+B
83应用或取消字体倾斜格式CTRL+I
84应用或取消下划线格式CTRL+U
85应用或取消删除线格式CTRL+5
86隐藏行CTRL+9
87取消隐藏行CTRL+SHIFT+( 左括号
88隐藏列CTRL+0（零）
89取消隐藏列CTRL+SHIFT+)右括号
909>Excel快捷键之编辑数据
91编辑活动单元格并将插入点放置到线条末尾F2
92取消单元格或编辑栏中的输入项ESC
93编辑活动单元格并清除其中原有的内容BACKSPACE
94将定义的名称粘贴到公式中F3
95完成单元格输入ENTER
96将公式作为数组公式输入CTRL+SHIFT+ENTER
97在公式中键入函数名之后，显示公式选项板CTRL+A
98在公式中键入函数名后为该函数插入变量名和括号CTRL+SHIFT+A
99显示“拼写检查”对话框。F7 键
10010>Excel快捷键之插入、删除和复制选中区域
101复制选定区域CTRL+C
102剪切选定区域CTRL+X
103粘贴选定区域CTRL+V
104清除选定区域的内容DELETE
105删除选定区域CTRL+ 连字符
106撤消最后一次操作CTRL+Z
107插入空白单元格CTRL+SHIFT+ 加号
10811>Excel快捷键之在选中区域内移动
109在选定区域内由上往下移动ENTER
110在选定区域内由下往上移动SHIFT+ENTER
111在选定区域内由左往右移动TAB
112在选定区域内由右往左移动SHIFT+TAB
113按顺时针方向移动到选定区域的下一个角CTRL+PERIOD
114右移到非相邻的选定区域CTRL+ALT+右箭头键
115左移到非相邻的选定区域CTRL+ALT+左箭头键
11612>Excel快捷键之选择单元格、列或行
117选定当前单元格周围的区域CTRL+SHIFT+*（星号）
118将选定区域扩展一个单元格宽度SHIFT+ 箭头键
119选定区域扩展到单元格同行同列的最后非空单元格CTRL+SHIFT+ 箭头键
120将选定区域扩展到行首SHIFT+HOME
121将选定区域扩展到工作表的开始CTRL+SHIFT+HOME
122将选定区域扩展到工作表的最后一个使用的单元格CTRL+SHIFT+END
123选定整列CTRL+SPACEBAR
124选定整行SHIFT+SPACEBAR
125选定整个工作表CTRL+A
126如果选定了多个单元格则只选定其中的单元格SHIFT+BACKSPACE
127将选定区域向下扩展一屏SHIFT+PAGE DOWN
128将选定区域向上扩展一屏SHIFT+PAGE UP
129选定了一个对象，选定工作表上的所有对象CTRL+SHIFT+SPACEBAR
130在隐藏对象、显示对象与对象占位符之间切换CTRL+6
131显示或隐藏“常用”工具栏CTRL+7
132使用箭头键启动扩展选中区域的功能F8
133将其他区域中的单元格添加到选中区域中SHIFT+F8
134将选定区域扩展到窗口左上角的单元格SCROLLLOCK, SHIFT+HOME
135将选定区域扩展到窗口右下角的单元格SCROLLLOCK, SHIFT+END
13613>Excel快捷键之处于End模式时展开选中区域
137打开或关闭 END 模式END
138将选定区域扩展到单元格同列同行的最后非空单元格END, SHIFT+ 箭头键
139将选定区域扩展到工作表上包含数据的最后一个单元格END, SHIFT+HOME
140将选定区域扩展到当前行中的最后一个单元格END, SHIFT+ENTER
14114>Excel快捷键之选择含有特殊字符单元格
142选中活动单元格周围的当前区域CTRL+SHIFT+*（星号）
143选中当前数组，此数组是活动单元格所属的数组CTRL+/
144选定所有带批注的单元格CTRL+SHIFT+O (字母 O)
145选择行中不与该行内活动单元格的值相匹配的单元格CTRL+\
146选中列中不与该列内活动单元格的值相匹配的单元格CTRL+SHIFT+|
147选定当前选定区域中公式的直接引用单元格CTRL+[ （左方括号）
148选定当前选定区域中公式直接或间接引用的所有单元格CTRL+SHIFT+{ 左大括号
149只选定直接引用当前单元格的公式所在的单元格CTRL+] （右方括号）
150选定所有带有公式的单元格，这些公式直接或间接引用当前单元格CTRL+SHIFT+}右大括号

Python
# single line
or """  content """
'''

multiline1

multiline2

multiline3

'''

Html

<!--

content content

-->

JS

// content

/*

content content

*/

R

# content