91 lines
3.2 KiB
TeX
91 lines
3.2 KiB
TeX
\documentclass[12pt,a4paper]{article}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage[english]{babel}
|
|
\usepackage{geometry}
|
|
\geometry{margin=2.5cm}
|
|
\usepackage{xcolor}
|
|
\usepackage{tcolorbox}
|
|
\usepackage{booktabs}
|
|
\usepackage{hyperref}
|
|
|
|
\definecolor{seblue}{rgb}{0.0,0.28,0.67}
|
|
|
|
\title{\textcolor{seblue}{Exercise 1: Arithmetic Expression Calculator}\\[0.3em]
|
|
\large AISE501 -- AI in Software Engineering I}
|
|
\author{Dr.\ Florian Herzog}
|
|
\date{Spring Semester 2026}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\section{Use Case}
|
|
|
|
A user enters an arithmetic expression as a text string, for example \texttt{"3 + 5 * 2"}.
|
|
The program evaluates the expression and prints the result.
|
|
|
|
The calculator must:
|
|
\begin{itemize}
|
|
\item Support the four basic operations: \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/}
|
|
\item Respect standard operator precedence (\texttt{*} and \texttt{/} bind more tightly than \texttt{+} and \texttt{-})
|
|
\item Support parentheses for grouping, e.g.\ \texttt{"(4 + 6) * 2"}
|
|
\item Support decimal numbers, e.g.\ \texttt{"3.5 + 2.5"}
|
|
\item Handle errors gracefully (division by zero, invalid characters, empty input)
|
|
\item \textbf{Not} use Python's built-in \texttt{eval()} function
|
|
\end{itemize}
|
|
|
|
\section{Example Input / Output}
|
|
|
|
\begin{center}
|
|
\begin{tabular}{ll}
|
|
\toprule
|
|
\textbf{Input Expression} & \textbf{Expected Output} \\
|
|
\midrule
|
|
\texttt{3 + 5} & \texttt{8} \\
|
|
\texttt{10 - 2 * 3} & \texttt{4} \\
|
|
\texttt{(4 + 6) * 2} & \texttt{20} \\
|
|
\texttt{100 / (5 * 2)} & \texttt{10} \\
|
|
\texttt{3.5 + 2.5 * 4} & \texttt{13.5} \\
|
|
\texttt{(1 + 2) * (3 + 4)} & \texttt{21} \\
|
|
\texttt{(empty)} & Error message \\
|
|
\texttt{10 / 0} & Error message \\
|
|
\texttt{abc + 1} & Error message \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
\section{Exercise}
|
|
|
|
Two implementations are provided:
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{\texttt{calculator\_bad.py}} -- A working but poorly written version that violates many clean code and PEP\,8 principles.
|
|
\item \textbf{\texttt{calculator\_good.py}} -- A clean, well-structured version following PEP\,8 and clean code best practices.
|
|
\end{enumerate}
|
|
|
|
\subsection*{Tasks}
|
|
|
|
\begin{enumerate}
|
|
\item Run both programs and verify they produce the same results.
|
|
\item Read the bad version and list all clean code / PEP\,8 violations you can find.
|
|
\item For each violation, explain which principle is broken and why it makes the code harder to read or maintain.
|
|
\item Compare your list with the good version to see how each issue was resolved.
|
|
\end{enumerate}
|
|
|
|
\subsection*{Violations to Look For}
|
|
|
|
\begin{itemize}
|
|
\item Unused imports
|
|
\item Missing or misleading comments and docstrings
|
|
\item Poor variable and function names (abbreviations, single letters)
|
|
\item Inconsistent indentation and spacing
|
|
\item Multiple statements on one line (semicolons)
|
|
\item Missing whitespace around operators
|
|
\item No proper error handling (bare \texttt{except}, printing instead of raising)
|
|
\item Magic numbers and unclear logic flow
|
|
\item Missing \texttt{if \_\_name\_\_ == "\_\_main\_\_"} guard
|
|
\item No type clarity in function signatures
|
|
\end{itemize}
|
|
|
|
\end{document}
|