数据工程

采集、存储、清洗、分析、可视化

Python 特点

解释型语、语言简洁、跨平台、可扩展、开放源码、多用途、类库丰富

Anaconda

Python的科学计算发行版,内置常用库,自动基础最新版MKL,加速运算

  • 命令行 Python不可用

    需要配置环境变量,添加Python.exe所在目录路径,Scripts目录路径

清华大学镜像站

汇率换算器

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""
将输入的CNY金额,根据汇率,计算出可兑换到的USD金额
"""
#汇率
USDRATE = 6.77
#输入CNY
strCNY = eval(input("请输入人民币(CNY)金额:"))
#汇率计算
print("美元(USD)金额是:", strCNY / USDRATE)

#**********************************************************
#将输入的带单位的货币金额,判断货币类型,根据汇率,计算出可兑换的金额

strMoney = input("请输入带单位的货币金额:")
unit = strMoney[-3:]
if unit == "CNY":
print("美元(USD)金额是:",eval(strMoney[:-3])/USDRATE)
elif unit == "USD":
print("人民币(CNY)金额是:{}".format(eval(strMoney[:-3])*USDRATE))
else:
print("目前版本尚不支持该种货币类型");

#**********************************************************
#将输入的带单位的货币金额,判断货币类型,根据汇率,计算出可兑换的金额,程序一直运行,直到用户输入 Q

strMoney = input("请输入带单位的货币金额(退出程序请输入Q):")
while strMoney != "Q":
unit = strMoney[-3:]

if unit == "CNY":
print("美元(USD)金额是:",eval(strMoney[:-3])/USDRATE)
elif unit == "USD":
print("人民币(CNY)金额是:{}".format(eval(strMoney[:-3])*USDRATE))
else:
print("目前版本尚不支持该种货币类型")

strMoney = input("请输入带单位的货币金额(退出程序请输入Q):")
print("程序已退出!")

#**********************************************************
#优化以上代码

#汇率转换
def ExchangeRate(unit):
if unit == "CNY":
return USDRATE
elif unit == "USD":
return 1/USDRATE
else:
return -1

#汇率兑换
def ConvertCurrency(im, er):
return im * er

#主函数
def main():
strMoney = input("请输入带单位的货币金额(退出程序请输入Q):")

while strMoney != "Q":
unit = strMoney[-3:]
er = ExchangeRate(unit)

if er != -1:
#lambda函数
ConvertCurrencyLamdba = lambda x: x * er
#调用lambda函数
outMoney = ConvertCurrencyLamdba(eval(strMoney[:-3]))

#outMoney = ConvertCurrency(eval(strMoney[:-3]),er)
print("金额是:",outMoney)
else:
print("目前版本尚不支持该种货币类型")

strMoney = input("请输入带单位的货币金额(退出程序请输入Q):")

print("程序已退出!")

if __name__ == "__main__":
main()

代码分析

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
""" 多行注释 """
# 单行注释
USDRATE #常量
strCNY #变量
input #输入
eval #字符串转数字
print #输出

#条件分支
if 表达式:
#语句
elif 表达式:
#语句
else
#语句

#while 循环
while 表达式:
#语句

#def 函数申明
def 函数名 (参数列表):
#函数体
return 返回值

#lambda 函数
lambda 参数列表:表达式

字符串处理

1
2
3
4
5
6
7
8
9
10
s = "Hello World!"

print("截取前3个字符:",s[0:3]);
print("截取前3个字符:",s[:3]);
print("截取llo字符:",s[2:5]);
print("截取后3个字符:",s[-3:]);

len(s) #输出 12
"llo" in s #输出 True

代码分析

#字符串本质
 h   e   l   l   0   _   W   o   r   l   d    !
 0   1   2   3   4   5   6   7   8   9   10   11 //正向取值    
-12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1  //反向取值
切片(Slicing)
[start:finish] 不包含 finish,start不填:从 0 开始;finish不填:到最后
[start:finish:countBy] countBy 等差,默认为 1

函数

  • 便于阅读和复用
  • 对一组表达特定功能表达式的封装
  • 是程序模块化
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
"""
判断某年某月第一天是星期几
"""

def is_leap_year(year):
if year %4==0 and year %100 !=0 or year %400 ==0:
return True
else:
return False

def get_num_of_days_in_month(year,month):
if month in (1,3,5,7,8,10,12):
return 31
elif month in (4,6,9,11):
return 30
elif is_leap_year(year):
return 29
else:
return 28

def get_total_num_of_day(year,month):
days =0
for y in range(1800,year):
if is_leap_year(y):
days+=366
else:
days+=365

for m in range(1,month):
days += get_num_of_days_in_month(year, m)
return days

def get_start_day(year,month):
return (3+get_total_num_of_day(year,month))%7

print(get_start_day(2033,12))

模块

>>> import math //引用模块
>>> dir(math)   //查看模块函数
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

(2 ** 2) ** 3
2 ** 2 ** 3
'abc' * 3

输出结果:64 256 abcabcabc