59 |
59 |
60 \begin{itemize} |
60 \begin{itemize} |
61 \item Create gcd.py file with: |
61 \item Create gcd.py file with: |
62 \end{itemize} |
62 \end{itemize} |
63 |
63 |
64 \begin{lstlisting}[language=python] |
64 \begin{verbatim} |
65 def gcd(a, b): |
65 def gcd(a, b): |
66 if a % b == 0: |
66 if a % b == 0: |
67 return b |
67 return b |
68 return gcd(b, a%b) |
68 return gcd(b, a%b) |
69 \end{lstlisting} |
69 \end{verbatim} |
70 \end{frame} |
70 \end{frame} |
71 \begin{frame}[fragile] |
71 \begin{frame}[fragile] |
72 \frametitle{Test for gcd.py} |
72 \frametitle{Test for gcd.py} |
73 \label{sec-3} |
73 \label{sec-3} |
74 |
74 |
75 \begin{itemize} |
75 \begin{itemize} |
76 \item Edit gcd.py file |
76 \item Edit gcd.py file |
77 \end{itemize} |
77 \end{itemize} |
78 |
78 |
79 \begin{lstlisting}[language=python] |
79 \begin{verbatim} |
80 |
80 def gcd(a, b): |
81 def gcd(a, b): |
81 if b == 0: |
82 if b == 0: |
82 return a |
83 return a |
83 return gcd(b, a%b) |
84 return gcd(b, a%b) |
84 |
85 |
85 if __name__=='__main__': |
86 if __name__=='__main__': |
86 result = gcd(48, 64) |
87 result = gcd(48, 64) |
87 if result != 16: |
88 if result != 16: |
88 print "Test failed" |
89 print "Test failed" |
89 print "Test Passed" |
90 print "Test Passed" |
90 \end{verbatim} |
91 \end{lstlisting} |
|
92 \end{frame} |
91 \end{frame} |
93 \begin{frame}[fragile] |
92 \begin{frame}[fragile] |
94 \frametitle{Automating tests} |
93 \frametitle{Automating tests} |
95 \label{sec-4} |
94 \label{sec-4} |
96 |
95 |
97 \begin{lstlisting}[language=python] |
96 \begin{verbatim} |
98 |
97 if __name=__='__main__': |
99 if __name=__='__main__': |
98 for line in open('numbers.txt'): |
100 for line in open('numbers.txt'): |
99 numbers = line.split() |
101 numbers = line.split() |
100 x = int(numbers[0]) |
102 x = int(numbers[1]) |
101 y = int(numbers[1]) |
103 y = int(numbers[2]) |
102 result = int(numbers[2]) |
104 result = int(numbers[3]) |
103 if gcd(x, y) != result: |
105 if gcd(x, y) != result: |
104 print "Failed gcd test |
106 print "Failed gcd test |
105 for", x, y |
107 for", x, y |
106 \end{verbatim} |
|
107 \end{frame} |
|
108 \begin{frame} |
|
109 \frametitle{Question 1} |
|
110 \label{sec-5} |
|
111 |
|
112 For the same inputs as gcd write automated tests for LCM. |
|
113 \end{frame} |
|
114 \begin{frame}[fragile] |
|
115 \frametitle{Solution 1} |
|
116 \label{sec-6} |
|
117 |
|
118 \begin{verbatim} |
|
119 def gcd(a, b): |
|
120 if a % b == 0: |
|
121 return b |
|
122 return gcd(b, a%b) |
|
123 |
|
124 def lcm(a, b): |
|
125 return (a * b) / gcd(a, b) |
|
126 |
|
127 if __name__ == '__main__': |
|
128 for line in open('lcmtestcases.txt'): |
|
129 numbers = line.split() |
|
130 x = int(numbers[0]) |
|
131 y = int(numbers[1]) |
|
132 result = int(numbers[2]) |
|
133 if lcm(x, y) != result: |
|
134 print "Failed lcm test for", x, y |
|
135 \end{verbatim} |
|
136 \end{frame} |
|
137 \begin{frame}[fragile] |
|
138 \frametitle{Meaning full names} |
|
139 \label{sec-7} |
|
140 |
|
141 \begin{verbatim} |
|
142 |
|
143 amount = 12.68 |
|
144 denom = 0.05 |
|
145 nCoins = round(amount / denom) |
|
146 rAmount = nCoins * denom |
|
147 \end{verbatim} |
|
148 \end{frame} |
|
149 \begin{frame} |
|
150 \frametitle{Code style} |
|
151 \label{sec-8} |
|
152 |
|
153 \begin{itemize} |
|
154 \item Four Space Indentation |
|
155 \item 79 character limit on a line |
|
156 \item Funtions should be seperated by |
|
157 blank line |
|
158 \item Use Docstring |
|
159 \item White space around operators |
|
160 |
|
161 \begin{itemize} |
|
162 \item l = 32 \% 4 |
|
163 \end{itemize} |
|
164 |
|
165 \end{itemize} |
|
166 \end{frame} |
|
167 \begin{frame} |
|
168 \frametitle{Question 2} |
|
169 \label{sec-9} |
|
170 |
|
171 \begin{itemize} |
|
172 \item Give meaningful names to the variables in following |
|
173 code |
|
174 |
|
175 \begin{itemize} |
|
176 \item c = a / b |
|
177 \end{itemize} |
|
178 |
|
179 \end{itemize} |
|
180 \end{frame} |
|
181 \begin{frame}[fragile] |
|
182 \frametitle{Solution 2} |
|
183 \label{sec-10} |
|
184 |
|
185 \begin{verbatim} |
|
186 |
|
187 quotient = dividend / divisor |
|
188 \end{verbatim} |
|
189 \end{frame} |
|
190 \begin{frame}[fragile] |
|
191 \frametitle{Code Snippet} |
|
192 \label{sec-11} |
|
193 |
|
194 \begin{verbatim} |
|
195 |
|
196 while True print 'Hello world' |
|
197 \end{verbatim} |
|
198 \end{frame} |
|
199 \begin{frame}[fragile] |
|
200 \frametitle{Error} |
|
201 \label{sec-12} |
|
202 |
|
203 \begin{lstlisting} |
|
204 while True print 'Hello world' |
|
205 \end{lstlisting} |
|
206 \begin{lstlisting} |
|
207 File "<stdin>", line 1, in ? |
|
208 while True print 'Hello world' |
|
209 SyntaxError: invalid syntax |
108 \end{lstlisting} |
210 \end{lstlisting} |
109 |
211 \end{frame} |
110 |
212 \begin{frame}[fragile] |
111 |
213 \frametitle{Code Snippet} |
112 |
214 \label{sec-13} |
113 $^{1}$ FOOTNOTE DEFINITION NOT FOUND: 0 |
215 |
114 |
216 \begin{verbatim} |
115 $^{2}$ FOOTNOTE DEFINITION NOT FOUND: 1 |
217 a = raw_input("Enter a number") |
116 |
218 try: |
117 $^{3}$ FOOTNOTE DEFINITION NOT FOUND: 2 |
219 num = int(a) |
|
220 except: |
|
221 print "Wrong input ..." |
|
222 \end{verbatim} |
|
223 \end{frame} |
|
224 \begin{frame}[fragile] |
|
225 \frametitle{Using idb} |
|
226 \label{sec-14} |
|
227 |
|
228 \small |
|
229 \begin{lstlisting} |
|
230 In []: import mymodule |
|
231 In []: mymodule.test() |
|
232 --------------------------------------------- |
|
233 NameError Traceback (most recent call last) |
|
234 <ipython console> in <module>() |
|
235 mymodule.py in test() |
|
236 1 def test(): |
|
237 2 total=1+1 |
|
238 ----> 3 print spam |
|
239 NameError: global name 'spam' is not defined |
|
240 |
|
241 In []: %debug |
|
242 > mymodule.py(2)test() |
|
243 0 print spam |
|
244 ipdb> total |
|
245 2 |
|
246 \end{lstlisting} |
|
247 \end{frame} |
|
248 \begin{frame} |
|
249 \frametitle{Summary} |
|
250 \label{sec-15} |
|
251 |
|
252 \begin{itemize} |
|
253 \item Create simple tests for a function. |
|
254 \item Learn to Automate tests using many predefined test cases. |
|
255 \item Good coding standards. |
|
256 \item Difference between syntax error and exception. |
|
257 \item Handling exception using try and except. |
|
258 \item Using \%debug for debugging on ipython. |
|
259 \end{itemize} |
|
260 \end{frame} |
|
261 \begin{frame} |
|
262 \frametitle{Thank you!} |
|
263 \label{sec-16} |
|
264 |
|
265 \begin{block}{} |
|
266 \begin{center} |
|
267 This spoken tutorial has been produced by the |
|
268 \textcolor{blue}{FOSSEE} team, which is funded by the |
|
269 \end{center} |
|
270 \begin{center} |
|
271 \textcolor{blue}{National Mission on Education through \\ |
|
272 Information \& Communication Technology \\ |
|
273 MHRD, Govt. of India}. |
|
274 \end{center} |
|
275 \end{block} |
118 \end{frame} |
276 \end{frame} |
119 |
277 |
120 \end{document} |
278 \end{document} |