mycalc.py.xhtml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. h t t :: / / t /
  4. h t t :: // // t //
  5. h ttttt ttttt ppppp sssss // // y y sssss ttttt //
  6. hhhh t t p p s // // y y s t //
  7. h hh t t ppppp sssss // // yyyyy sssss t //
  8. h h t t p s :: / / y .. s t .. /
  9. h h t t p sssss :: / / yyyyy .. sssss t .. /
  10. <https://y.st./>
  11. Copyright © 2017 Alex Yst <mailto:copyright@y.st>
  12. This program is free software: you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation, either version 3 of the License, or
  15. (at your option) any later version.
  16. This program is distributed in the hope that it will be useful,
  17. but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. GNU General Public License for more details.
  20. You should have received a copy of the GNU General Public License
  21. along with this program. If not, see <https://www.gnu.org./licenses/>.
  22. -->
  23. <!DOCTYPE html>
  24. <html xmlns="http://www.w3.org/1999/xhtml">
  25. <head>
  26. <base href="https://y.st./en/coursework/CS1101/mycalc.py.xhtml" />
  27. <title>mycalc.py &lt;https://y.st./en/coursework/CS1101/mycalc.py.xhtml&gt;</title>
  28. <link rel="icon" type="image/png" href="/link/CC_BY-SA_4.0/y.st./icon.png" />
  29. <link rel="stylesheet" type="text/css" href="/link/basic.css" />
  30. <link rel="stylesheet" type="text/css" href="/link/site-specific.css" />
  31. <script type="text/javascript" src="/script/javascript.js" />
  32. <meta name="viewport" content="width=device-width" />
  33. </head>
  34. <body>
  35. <nav>
  36. <p>
  37. <a href="/en/">Home</a> |
  38. <a href="/en/a/about.xhtml">About</a> |
  39. <a href="/en/a/contact.xhtml">Contact</a> |
  40. <a href="/a/canary.txt">Canary</a> |
  41. <a href="/en/URI_research/"><abbr title="Uniform Resource Identifier">URI</abbr> research</a> |
  42. <a href="/en/opinion/">Opinions</a> |
  43. <a href="/en/coursework/">Coursework</a> |
  44. <a href="/en/law/">Law</a> |
  45. <a href="/en/a/links.xhtml">Links</a> |
  46. <a href="/en/coursework/CS1101/mycalc.py.xhtml.asc">{this page}.asc</a>
  47. </p>
  48. <hr/>
  49. <p>
  50. <a href="/en/coursework/BUS1101/" title="Principles of Business Management">BUS 1101</a> |
  51. <span class="hyperlink_unavailable" title="Basic Accounting">BUS 1102</span> |
  52. <span class="hyperlink_unavailable" title="Principles of Marketing">BUS 2201</span> |
  53. <span class="hyperlink_unavailable" title="Multinational Management">BUS 2207</span> |
  54. <span class="hyperlink_unavailable" title="Business and Society">BUS 3306</span> |
  55. <a href="/en/coursework/CS1101/" title="Programming Fundamentals">CS 1101</a> |
  56. <a href="/en/coursework/CS1102/" title="Programming 1">CS 1102</a> |
  57. <a href="/en/coursework/CS1103/" title="Programming 2">CS 1103</a> |
  58. <span class="hyperlink_unavailable" title="Computer Systems">CS 1104</span> |
  59. <a href="/en/coursework/CS2203/" title="Databases 1">CS 2203</a> |
  60. <span class="hyperlink_unavailable" title="Communications and Networking">CS 2204</span> |
  61. <a href="/en/coursework/CS2205/" title="Web Programming 1">CS 2205</a> |
  62. <a href="/en/coursework/CS2301/" title="Operating Systems 1">CS 2301</a> |
  63. <span class="hyperlink_unavailable" title="Software Engineering 1">CS 2401</span> |
  64. <span class="hyperlink_unavailable" title="Data Structures">CS 3303</span> |
  65. <span class="hyperlink_unavailable" title="Analysis of Algorithms">CS 3304</span> |
  66. <span class="hyperlink_unavailable" title="Web Programming 2">CS 3305</span> |
  67. <span class="hyperlink_unavailable" title="Databases 2">CS 3306</span> |
  68. <span class="hyperlink_unavailable" title="Operating Systems 2">CS 3307</span> |
  69. <span class="hyperlink_unavailable" title="Information Retrieval">CS 3308</span> |
  70. <span class="hyperlink_unavailable" title="Comparative Programming Languages">CS 4402</span> |
  71. <span class="hyperlink_unavailable" title="Software Engineering 2">CS 4403</span> |
  72. <span class="hyperlink_unavailable" title="Advanced Networking and Data Security">CS 4404</span> |
  73. <span class="hyperlink_unavailable" title="Mobile Applications">CS 4405</span> |
  74. <span class="hyperlink_unavailable" title="Computer Graphics">CS 4406</span> |
  75. <span class="hyperlink_unavailable" title="Data Mining and Machine Learning">CS 4407</span> |
  76. <span class="hyperlink_unavailable" title="Artificial Intelligence">CS 4408</span> |
  77. <span class="hyperlink_unavailable" title="English Composition 2">ENGL 1102</span> |
  78. <span class="hyperlink_unavailable" title="World Literature">ENGL 1405</span> |
  79. <span class="hyperlink_unavailable" title="Introduction to Environmental Science">ENVS 1301</span> |
  80. <a href="/en/coursework/HIST1421/" title="Greek and Roman Civilization">HIST 1421</a> |
  81. <span class="hyperlink_unavailable" title="College Algebra">MATH 1201</span> |
  82. <span class="hyperlink_unavailable" title="Calculus">MATH 1211</span> |
  83. <span class="hyperlink_unavailable" title="Introduction to Statistics">MATH 1280</span> |
  84. <span class="hyperlink_unavailable" title="Discrete Mathematics">MATH 1302</span> |
  85. <span class="hyperlink_unavailable" title="Introduction to Philosophy">PHIL 1402</span> |
  86. <a href="/en/coursework/PHIL1404/" title="Ethics and Social Responsibility">PHIL 1404</a> |
  87. <a href="/en/coursework/POLS1503/" title="Globalization">POLS 1503</a> |
  88. <span class="hyperlink_unavailable" title="Introduction to Psychology">PSYC 1504</span> |
  89. <a href="/en/coursework/UNIV1001/" title="Online Education Strategies">UNIV 1001</a>
  90. </p>
  91. <hr/>
  92. <p>
  93. <a href="/en/coursework/CS1101/t_area.py.xhtml" title="t_area.py">Unit 2</a> |
  94. <a href="/en/coursework/CS1101/calculator_flowchart.xhtml" title="calculator flowchart">Unit 3</a> |
  95. <a href="/en/coursework/CS1101/tryme3.py.xhtml" title="tryme3.py">Unit 4</a> |
  96. <a href="/en/coursework/CS1101/mycalc.py.xhtml" title="mycalc.py">Unit 5</a> |
  97. <a href="/en/coursework/CS1101/bool.py.xhtml" title="bool.py">Unit 6</a> |
  98. <a href="/en/coursework/CS1101/sort_fruits.py.xhtml" title="sort_fruits.py">Unit 7</a>
  99. </p>
  100. <hr/>
  101. </nav>
  102. <header>
  103. <h1>mycalc.py</h1>
  104. <p>Written in <span title="Programming Fundamentals">CS 1101</span> of <a href="http://www.uopeople.edu/">University of the People</a>, finalized on 2017-03-01</p>
  105. </header>
  106. <h2>Script:</h2>
  107. <blockquote>
  108. <pre><code># Every good program should begin with a license comment that declares
  109. # the file as being covered by a free software license.
  110. #
  111. # This program is free software: you can redistribute it and/or modify
  112. # it under the terms of the GNU General Public License as published by
  113. # the Free Software Foundation, either version 3 of the License, or
  114. # (at your option) any later version.
  115. #
  116. # This program is distributed in the hope that it will be useful,
  117. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  118. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  119. # GNU General Public License for more details.
  120. #
  121. # You should have received a copy of the GNU General Public License
  122. # along with this program. If not, see &lt;https://www.gnu.org./licenses/&gt;.
  123. # This makes Python2 behave like python3 in regards to division.
  124. from __future__ import division
  125. # This makes Python2 behave like Python3 in regards to user input.
  126. if &quot;raw_input&quot; in vars(__builtins__):
  127. input = raw_input
  128. # User input is in string form, not number form. We need to not only
  129. # make sure the user input a number, but also convert the string
  130. # representation of that number into a numeric representation.
  131. def sanitize_and_parse(string):
  132. try:
  133. # If the input can be treated as an integer, we&apos;ll do that.
  134. return int(string)
  135. except:
  136. try:
  137. # If the input cannot be treated as an integer but can be treated as a
  138. # float, we&apos;ll do that instead.
  139. return float(string)
  140. except:
  141. # The assignment instructions say to disallow the use of zeros as
  142. # operands. Normally, invalid input shouldn&apos;t be treated as a valid
  143. # number, but we&apos;re rejecting zero anyway, so we might as well use it
  144. # as the return for bad input as well. That way, our zero-checker will
  145. # automatically filter out bad input.
  146. return 0
  147. # Display the equation thus far
  148. print(&quot;Equation: [?] [?] [?] == [?]&quot;)
  149. # Python doesn&apos;t have a &quot;do while&quot; loop construct. Let&apos;s instead use a
  150. # variable and a while loop.
  151. operand0 = 0
  152. while operand0 == 0:
  153. # Prompt for the first operand
  154. operand0 = input(&apos;Please provide the first operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  155. Operand 0: &apos;)
  156. # Clean up the first operand
  157. operand0 = sanitize_and_parse(operand0)
  158. if operand0 == 0:
  159. print(&quot; [ERROR]: Only non-zero numbers can be used as input.&quot;)
  160. # Display the equation thus far
  161. print(&quot;Equation: &quot; + str(operand0) + &quot; [?] [?] == [?]&quot;)
  162. operator = None
  163. while operator != &quot;+&quot; and operator != &quot;*&quot; and operator != &quot;-&quot; and operator != &quot;/&quot;:
  164. operator = input(&apos;Please enter an operator, then hit &quot;enter&quot;. Valid operators are &quot;+&quot; (addition), &quot;*&quot; (multiplication), &quot;-&quot; (subtraction), and &quot;/&quot; (division).
  165. Operator: &apos;)
  166. if operator != &quot;+&quot; and operator != &quot;*&quot; and operator != &quot;-&quot; and operator != &quot;/&quot;:
  167. print(&apos; [ERROR]: &quot;+&quot;, &quot;*&quot;, &quot;-&quot;, and &quot;/&quot; are the only supported operators.&apos;)
  168. # Display the equation thus far
  169. print(&quot;Equation: &quot; + str(operand0) + &quot; &quot; + operator + &quot; [?] == [?]&quot;)
  170. operand1 = 0
  171. while operand1 == 0:
  172. # Prompt for the second operand
  173. operand1 = input(&apos;Please provide the second operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  174. Operand 1: &apos;)
  175. # Clean up the second operand
  176. operand1 = sanitize_and_parse(operand1)
  177. if operand1 == 0:
  178. print(&quot; [ERROR]: Only non-zero numbers can be used as input.&quot;)
  179. # Let&apos;s do some maths!
  180. if operator == &quot;+&quot;:
  181. result = operand0 + operand1
  182. elif operator == &quot;-&quot;:
  183. result = operand0 - operand1
  184. elif operator == &quot;*&quot;:
  185. result = operand0 * operand1
  186. else: # operator == &quot;/&quot;
  187. result = operand0 / operand1
  188. # Display the completed equation, including the result
  189. print(&quot;Equation: &quot; + str(operand0) + &quot; &quot; + operator + &quot; &quot; + str(operand1) + &quot; == &quot; + str(result))
  190. </code></pre>
  191. </blockquote>
  192. <h2>Output:</h2>
  193. <blockquote>
  194. <pre>Python 2.7.9 (default, Jun 29 2016, 13:08:31)
  195. [GCC 4.9.2] on linux2
  196. Type &quot;copyright&quot;, &quot;credits&quot; or &quot;license()&quot; for more information.
  197. &gt;&gt;&gt; ================================ RESTART ================================
  198. &gt;&gt;&gt;
  199. Equation: [?] [?] [?] == [?]
  200. Please provide the first operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  201. Operand 0: 0
  202. [ERROR]: Only non-zero numbers can be used as input.
  203. Please provide the first operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  204. Operand 0: Five
  205. [ERROR]: Only non-zero numbers can be used as input.
  206. Please provide the first operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  207. Operand 0: 215
  208. Equation: 215 [?] [?] == [?]
  209. Please enter an operator, then hit &quot;enter&quot;. Valid operators are &quot;+&quot; (addition), &quot;*&quot; (multiplication), &quot;-&quot; (subtraction), and &quot;/&quot; (division).
  210. Operator: q
  211. [ERROR]: &quot;+&quot;, &quot;*&quot;, &quot;-&quot;, and &quot;/&quot; are the only supported operators.
  212. Please enter an operator, then hit &quot;enter&quot;. Valid operators are &quot;+&quot; (addition), &quot;*&quot; (multiplication), &quot;-&quot; (subtraction), and &quot;/&quot; (division).
  213. Operator: /
  214. Equation: 215 / [?] == [?]
  215. Please provide the second operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  216. Operand 1: 0
  217. [ERROR]: Only non-zero numbers can be used as input.
  218. Please provide the second operand (a non-zero number, if you will), then hit &quot;enter&quot;.
  219. Operand 1: 2
  220. Equation: 215 / 2 == 107.5
  221. &gt;&gt;&gt;</pre>
  222. </blockquote>
  223. <hr/>
  224. <p>
  225. Copyright © 2017 Alex Yst;
  226. You may modify and/or redistribute this document under the terms of the <a rel="license" href="/license/gpl-3.0-standalone.xhtml"><abbr title="GNU&apos;s Not Unix">GNU</abbr> <abbr title="General Public License version Three or later">GPLv3+</abbr></a>.
  227. If for some reason you would prefer to modify and/or distribute this document under other free copyleft terms, please ask me via email.
  228. My address is in the source comments near the top of this document.
  229. This license also applies to embedded content such as images.
  230. For more information on that, see <a href="/en/a/licensing.xhtml">licensing</a>.
  231. </p>
  232. <p>
  233. <abbr title="World Wide Web Consortium">W3C</abbr> standards are important.
  234. This document conforms to the <a href="https://validator.w3.org./nu/?doc=https%3A%2F%2Fy.st.%2Fen%2Fcoursework%2FCS1101%2Fmycalc.py.xhtml"><abbr title="Extensible Hypertext Markup Language">XHTML</abbr> 5.1</a> specification and uses style sheets that conform to the <a href="http://jigsaw.w3.org./css-validator/validator?uri=https%3A%2F%2Fy.st.%2Fen%2Fcoursework%2FCS1101%2Fmycalc.py.xhtml"><abbr title="Cascading Style Sheets">CSS</abbr>3</a> specification.
  235. </p>
  236. </body>
  237. </html>