-
Notifications
You must be signed in to change notification settings - Fork 0
/
PythonTalk06.tex
202 lines (189 loc) · 5.24 KB
/
PythonTalk06.tex
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
\input{LatexConfig.tex}
\begin{document}
\PreFirstFrame
\begin{frame} [fragile]
\centerline{\fontsize{42}{42}\selectfont Python Talk 6}
\end{frame}
\PostFirstFrame
\begin{frame} [fragile]
\frametitle{复习}
\linespread{1.25}
\begin{enumerate}
\item 用\inlinePython{for}和\inlinePython{print}打印
\begin{itemize}
\item \inlinePython{1 2 4 8 16 32 64 }
\end{itemize}
\item 使用\inlinePython{input}获取输入字符串并判断其是否含\inlinePython{'HCC'}
\item 这些函数有什么作用?
\begin{itemize}
\item \inlinePython{all min any id hash}
\end{itemize}
\item 让命令行执行
\begin{lstlisting}[basicstyle=\ttfamily]
ping 10.60.0.0 -c 1
ping 10.60.0.1 -c 1
ping 10.60.0.2 -c 1
...
ping 10.60.0.255 -c 1
\end{lstlisting}
\end{enumerate}
\end{frame}
\begin{frame} [fragile]
\frametitle{排序}
\linespread{1.25}
\begin{columns}[T]
\begin{column}[T]{.5\textwidth}
\begin{itemize}
\item 如何排序这个数列?
\begin{itemize}
\item \inlinePython{a = [3, 1, 4, 2]}
\end{itemize}
\item 答案
\begin{itemize}
\item \inlinePython{a.sort()}
\end{itemize}
\item 提高:如何反向排序?
\end{itemize}
\end{column}
\begin{column}[T]{.5\textwidth}
手动实现(选择排序)
\footnotesize
\begin{lstlisting}[style=pythonstyle, gobble=12]
b = []
for i in range(len(a)) :
m = 0
for j in range(len(a)) :
if a[m] > a[j] :
m = j
b.append(a[m])
del(a[m])
a = b
\end{lstlisting}
\end{column}
\end{columns}
\end{frame}
\begin{frame} [fragile]
\frametitle{函数}
\begin{itemize}
\item 函数相当于通过参数计算出返回值
\item 定义
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
def @函数名@(@参数1@, @参数2@, ...) :
@语句@
return @返回值@
\end{lstlisting}
\item 调用
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
@函数名@(@参数1@, @参数2@, ...)
\end{lstlisting}
\item 简便定义形式(lambda表达式)
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
@函数名@ = lambda @参数@... : @返回值@
\end{lstlisting}
\end{itemize}
\end{frame}
\begin{frame} [fragile]
\frametitle{特殊排序}
\linespread{1.25}
\begin{itemize}
\item 如何按照tuple的第二位排序?
\begin{itemize}
\item \inlinePython{a = [(1, 2), (4, 9), (6, 7)]}
\end{itemize}
\item 方法1
\begin{itemize}
\item \inlinePython{a.sort(key = lambda x: x[1])}
\end{itemize}
\item 方法2
\begin{itemize}
\item
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
def f(a) :
return a[1]
a.sort(key=f)
\end{lstlisting}
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame} [fragile]
\frametitle{字符串编码问题}
\linespread{1.25}
\begin{itemize}
\item 方法
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
a = '@\color{Pink}你好@'
b = a.encode('@\color{Pink}编码@') # 将字符串变成二进制码
c = b.decode('@\color{Pink}编码@') # 将字节变成字符串
\end{lstlisting}
\item 常见编码
\begin{itemize}
\item UTF-8 (多语言通用)
\item GBK (中文)
\item GB2312 (中文)
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame} [fragile]
\frametitle{进制转换}
\begin{itemize}
\item 从十进制转换
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl]
bin(1024) # 二进制
oct(1024) # 八进制
hex(1024) # 十六进制
\end{lstlisting}
\item 转换为十进制
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl]
int('10', 2) # 二进制的 10
int('0b10', 2) # 二进制的 10
int('13', 7) # 七进制的 13
\end{lstlisting}
\item 错误用法
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl]
int('0b10') # 必须注明进制数
int('0x10', 2) # 输入和注明进制数不匹配
\end{lstlisting}
\end{itemize}
\end{frame}
\begin{frame} [fragile]
\frametitle{时间}
\linespread{1.25}
\begin{itemize}
\item 关于时间的库
\begin{lstlisting}[style=pythonstyle, gobble=8, texcl, escapechar=@]
from datetime import datetime
a = datetime.now()
b = datetime(@年@, @月@, @日@, ...) # 输入整数
b = datetime(2000, 8, 24) # 例
datetime.fromtimestamp(@时间值@)# 数值转为时间
a.timestamp() # 时间转为数值
a - b # 计算时间差
a.strftime('%H:%M') # 输出为特定格式
\end{lstlisting}
\end{itemize}
\end{frame}
\begin{frame} [fragile]
\frametitle{练习}
\linespread{1.5}
\begin{enumerate}
\item 模拟网络攻击检测
\begin{itemize}
\item 假设某个用户上一次访问我方网站的时间已被记录为a
\item 我们希望判断用户两次访问的间隔是否大于一秒
\item 如果目前访问网站的时间在a后一秒之前,则输出``攻击''
\item 否则输出``正常''
\end{itemize}
\item 将时间输出为中文
\begin{itemize}
\item 例如对于 \inlinePython{a = datetime(2000, 8, 24, 12, 34, 56)}
\item 输出 ``2000年8月24日12时34分56秒''
\item 提示:尝试 \inlinePython{a.strftime('%Y %m %d %H:%M:%S')}
\end{itemize}
\end{enumerate}
\end{frame}
\PreLastFrame
\begin{frame}
\centerline{\fontsize{32}{32}\selectfont 感谢参加此次活动}
\end{frame}
\newpage
\end{document}