From 1ad1d95f9bacd95ddc0a8cf47f01042aa9f6b880 Mon Sep 17 00:00:00 2001 From: Rickard Armiento <gitcommits@armiento.net> Date: Tue, 30 Jan 2018 15:09:27 +0100 Subject: [PATCH] Labbinstruktioner --- labbhandledning/Makefile | 2 + labbhandledning/labbnotes.tex | 542 ++++++++++++++++++++++++++++++++++ 2 files changed, 544 insertions(+) create mode 100644 labbhandledning/Makefile create mode 100644 labbhandledning/labbnotes.tex diff --git a/labbhandledning/Makefile b/labbhandledning/Makefile new file mode 100644 index 0000000..ac66355 --- /dev/null +++ b/labbhandledning/Makefile @@ -0,0 +1,2 @@ +labbnotes: labbnotes.tex + latexmk -pdf labbnotes.tex diff --git a/labbhandledning/labbnotes.tex b/labbhandledning/labbnotes.tex new file mode 100644 index 0000000..291da72 --- /dev/null +++ b/labbhandledning/labbnotes.tex @@ -0,0 +1,542 @@ +\documentclass[10pt]{memoir} +\usepackage[margin=3.7cm,top=3cm,bottom=2cm]{geometry} +%\documentclass[10pt,twoside,openright]{memoir} +%\usepackage{createspace} +%\usepackage[size=pocket,noicc]{createspace} +%\usepackage[paperwidth=4.25in, paperheight=6.875in,bindingoffset=.75in]{geometry} +%\usepackage[T1]{fontenc} +\usepackage{graphicx} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{cancel} +%\usepackage[spanish]{babel} +%\usepackage{tgtermes} +%\usepackage[pdftex,colorlinks]{hyperref} +%\usepackage[sort&compress]{natbib} +%\usepackage{hypernat} + +%\makeevenhead{headings}% +% {\thepage}{}{\slshape\bookname~\thebook\qquad\partname~\thepart\qquad\leftmark} +%\makeoddhead{headings}{\slshape\rightmark}{}{\thepage} + +\usepackage{pdfpages} +\usepackage[pdftex,colorlinks]{hyperref} +%\usepackage[sort&compress,sectionbib]{natbib} +%\usepackage{natbibsuper} +%\usepackage[super,sort&compress]{natbib} +\usepackage{hypernat} +\usepackage{memhfixc} +\usepackage{enumitem} + +\usepackage{listings} +\lstset{escapeinside={<@}{@>}} + + + +% Python style for highlighting +\newcommand\pythonstyle{\lstset{ +language=Python, +basicstyle=\ttm, +otherkeywords={self}, % Add keywords here +keywordstyle=\ttb\color{deepblue}, +%emph={MyClass,__init__}, % Custom highlighting +emphstyle=\ttb\color{deepred}, % Custom highlighting style +stringstyle=\color{deepgreen}, +%frame=tb, % Any extra options here +frame=single, +showstringspaces=false % +breaklines=true, +basicstyle=\scriptsize\ttfamily, +keywordstyle=\bfseries\color{green!40!black}, +commentstyle=\itshape\color{purple!40!black}, +identifierstyle=\color{black},%\color{blue}, +stringstyle=\color{orange} +}} + +\newcommand\pythoninlinestyle{\lstset{ +language=Python, +basicstyle=\ttm, +otherkeywords={self}, % Add keywords here +keywordstyle=\ttb\color{deepblue}, +emph={MyClass,__init__}, % Custom highlighting +emphstyle=\ttb\color{deepred}, % Custom highlighting style +stringstyle=\color{deepgreen}, +%frame=tb, % Any extra options here +frame=single, +showstringspaces=false % +breaklines=true, +basicstyle=\scriptsize\ttfamily, +keywordstyle=\bfseries\color{green!40!black}, +commentstyle=\itshape\color{purple!40!black}, +identifierstyle=\color{black},%\color{blue}, +stringstyle=\color{orange} +}} + +\newcommand\pythoninteractivestyle{\lstset{ +language=Python, +basicstyle=\ttm, +otherkeywords={self}, % Add keywords here +keywordstyle=\ttb\color{deepblue}, +emph={MyClass,__init__}, % Custom highlighting +emphstyle=\ttb\color{deepred}, % Custom highlighting style +stringstyle=\color{deepgreen}, +%frame=tb, % Any extra options here +frame=single, +showstringspaces=false % +breaklines=true, +basicstyle=\scriptsize\ttfamily, +keywordstyle=\bfseries\color{green!40!black}, +commentstyle=\itshape\color{purple!40!black}, +identifierstyle=\color{black},%\color{blue}, +stringstyle=\color{orange} +}} + +\newcommand\cstyle{\lstset{ +language=c, +basicstyle=\ttm, +otherkeywords={self}, % Add keywords here +keywordstyle=\ttb\color{deepblue}, +emph={MyClass,__init__}, % Custom highlighting +emphstyle=\ttb\color{deepred}, % Custom highlighting style +stringstyle=\color{deepgreen}, +%frame=tb, % Any extra options here +frame=single, +showstringspaces=false % +breaklines=true, +basicstyle=\scriptsize\ttfamily, +keywordstyle=\bfseries\color{green!40!black}, +commentstyle=\itshape\color{purple!40!black}, +identifierstyle=\color{black},%\color{blue}, +stringstyle=\color{orange} +}} + +% Python environment +\lstnewenvironment{python}[1][] +{ +\pythonstyle +\lstset{#1} +} +{} + +% Python environment +\lstnewenvironment{ccode}[1][] +{ +\cstyle +\lstset{#1} +} +{} + +% Python environment +\lstnewenvironment{ipython}[1][] +{ +\pythoninteractivestyle +\lstset{#1} +} +{} + +% Python for external files +\newcommand\pythonexternal[2][]{{ +\pythonstyle +\lstinputlisting[#1]{#2}}} + +% Python for inline +\newcommand\pythoninline[1]{{\fbox{\pythoninlinestyle\lstinline!#1!}}} + +%\usepackage{showframe} +\usepackage{framed} +\renewenvironment{shaded}{% + \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolor}}% + \MakeFramed{\advance\hsize-\width \FrameRestore\FrameRestore}}% + {\endMakeFramed} +\definecolor{shadecolor}{gray}{0.90} + +\usepackage{tikz} +\newcommand*\circled[1]{\tikz[baseline=(char.base)]{ + \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} + +\newcommand{\chapsubhead}[1]{% + \\{\Large\parbox{\textwidth}{#1}}% +} + +%\chapterstyle{bringhurst} +%\usepackage[sectionbib]{chapterbib} +%\usepackage{amssymb,amsmath,amsthm,amsfonts,amscd,amsrefs} +%\newcommand{\onlinecite}[1]{\hspace{-1 ex} \nocite{#1}\citenum{#1}} +%\newcommand{\citeonline}[1]{\hspace{-1 ex} \nocite{#1}\citenum{#1}} + +%\makeatletter +%\newenvironment{bibchapter}[1][\bibname]{% +% \begingroup +% \protected@edef\@{% +% \endgroup +% \protect\chapter*{#1}% +% \protect\bib@div@mark{#1}% +% }% +% \@\bibmark +%}{\par} +%\makeatother + +\renewcommand{\chaptername}{Laboration} + +%\usepackage{mathpazo} +\usepackage[protrusion=true,expansion=true]{microtype} +%\usepackage{type1cm} +%\usepackage{lettrine} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\argmin{\mathop{\mathrm{arg\,min}}} +\newcommand{\tdef}[1]{\makebox[0 pt]{\index{#1}}\emph{#1}} +\newcommand{\defsymb}[1]{\makebox[0 pt]{\index{#1}}#1} +\newcommand{\indexsymb}[1]{\makebox[0 pt]{\index{#1}}} +\newcommand{\defsymbx}[2]{\makebox[0 pt]{\index{#2}}#1} +\newcommand{\tdefu}[1]{\makebox[0 pt]{\index{#1}}{#1}} +\newcommand{\tdefx}[2]{\makebox[0 pt]{\index{#2}}\emph{#1}} +%\newcommand{\rm}[1]{\mathrm{#1}} +%\renewcommand{\it}{} +%\renewcommand{\bf}{} +\newcommand{\DD}[1]{\ensuremath{\frac{d}{d #1}}} +\newcommand{\DN}[2]{\ensuremath{\frac{d^{#1}}{d #2^{#1}}}} +\newcommand{\Dd}[1]{\ensuremath{\frac{\partial}{\partial #1}}} +\newcommand{\Dn}[2]{\ensuremath{\frac{\partial^{#1}}{\partial #2^{#1}}}} +% +\newcommand{\dD}[2]{\ensuremath{\frac{d #1}{d #2}}} +\newcommand{\dN}[3]{\ensuremath{\frac{d^{#1} #2}{d #3^{#1}}}} +\newcommand{\dd}[2]{\ensuremath{\frac{\partial #1}{\partial #2}}} +\newcommand{\dn}[3]{\ensuremath{\frac{\partial^{#1} #2}{\partial #3^{#1}}}} +% +\newcommand{\fD}[2]{\ensuremath{\frac{\delta #1}{\delta #2}}} +% +\newcommand{\td}[1]{\ensuremath{\tilde{#1}}} +%\newcommand{\frac}[2]{\ensuremath{\frac{#1}{#2}}} +% +\newcommand{\UU}[1]{\ensuremath{\mathrm{\ #1}}} +\newcommand{\CC}[1]{\ensuremath{\mbox{\ #1}}} +\newcommand{\EE}[1]{\ensuremath{\cdot 10^{#1}}} +% +\newcommand{\eh}{\ensuremath{\hat{e}}} +\newcommand{\vcint}[1]{\ensuremath{\mathbf{#1}}} +\newcommand{\vc}[1]{\protect\vcint{#1}} +%\newcommand{\op}[1]{\ensuremath{\mathrm{\hat{#1}}}} +\newcommand{\opint}[1]{\mathrm{\hat{#1}}} +\newcommand{\op}[1]{\protect\opint{#1}} +% +\newcommand{\avg}[1]{\langle#1\rangle} +\newcommand{\abs}[1]{\left|#1\right|} +\newcommand{\subs}[2]{\left.#1\right|_{#2}} +\newcommand{\pp}[1]{\left(#1\right)} +\newcommand{\ceil}[1]{\left\lceil#1\right\rceil} +\newcommand{\floor}[1]{\left\lfloor#1\right\rfloor} +\newcommand{\ph}[1]{\left[#1\right]} +\newcommand{\sqr}[1]{\ensuremath{\left(#1\right)^2}} +\newcommand{\two}[4]{\ensuremath{\left\{\begin{array}{ll}#1\\#3\end{array}\right.}} +\newcommand{\mtrx}[2]{\ensuremath{\left[\begin{array}{#1}#2\end{array}\right]}} +\newcommand{\detr}[2]{\ensuremath{\left|\begin{array}{#1}#2\end{array}\right|}} +% +\newcommand{\bra}[1]{\ensuremath{\langle #1|}} +\newcommand{\ket}[1]{\ensuremath{|#1\rangle}} +\newcommand{\braket}[2]{\ensuremath{\langle #1|#2\rangle}} +\newcommand{\braketop}[3]{\ensuremath{\langle #1|#2|#3\rangle}} +%\newcommand{½}{{\textstyle\frac{1}{2}}} +%\newcommand{\½}{{\textstyle\ {\scriptstyle-}\frac{1}{2}}} +\newcommand{\1}{{\textstyle\ -1}} +% +\newcommand{\breath}{\vspace{0.2 cm}} +% +\newcommand{\fig}[1]{\begin{center}\includegraphics[width=9.0cm]{#1}\end{center}} +\newcommand{\maplefig}[1]{\begin{center}\includegraphics*[bbllx=4cm,bblly=4cm,bburx=18cm,bbury=25cm,angle=-90, width=9.0cm]{#1}\end{center}} +% \newcommand{\maplefig}[1]{\includegraphics*[bbllx=3cm,bblly=3cm,bburx=18.5cm,bbury=25cm,angle=-90, width=7cm]{#1}} +\newcommand{\eqn}[1]{Eq.~(\ref{eqn:#1})} +\newcommand{\figr}[1]{Fig.~\ref{fig:#1}} +\newcommand{\eqns}[2]{Eqs.~(\ref{eqn:#1}) and (\ref{eqn:#2})} +\newcommand{\eqts}[3]{Eqs.~(\ref{eqn:#1}), (\ref{eqn:#2}) and (\ref{eqn:#3})} +\newcommand{\eqnr}[2]{Eqs.~(\ref{eqn:#1})--(\ref{eqn:#2})} +\newcommand{\Eqnr}[2]{Equations~(\ref{eqn:#1})--(\ref{eqn:#2})} +\newcommand{\figrs}[2]{Figs.~\ref{fig:#1} and \ref{fig:#2}} +\newcommand{\figrr}[2]{Figs.~\ref{fig:#1}--\ref{fig:#2}} +\newcommand{\ra}{\ensuremath{\Rightarrow}} +\newcommand{\Ra}{\ensuremath{\quad\Rightarrow}} +\newcommand{\rA}{\ensuremath{\Rightarrow\quad}} +\newcommand{\RA}{\ensuremath{\quad\Rightarrow\quad}} +\newcommand{\cmnt}[1]{\Bigg\{\mbox{\begin{tabular}{@{}l@{}}#1\end{tabular}}\Bigg\}} +\newcommand{\idxnote}[1]{\mbox{\scriptsize{\begin{tabular}{@{}c@{}}#1\end{tabular}}}} +\newcommand{\txt}[1]{\ensuremath{\mathrm{#1}}} +\newcommand{\defn}{\equiv} +% +\newcommand{\HP}[1]{\ensuremath{\mathrm{H}_{#1}}} +\newcommand{\NHP}[1]{\ensuremath{\mathrm{\widetilde{H}}_{#1}}} +\newcommand{\Ai}{\ensuremath{\mathrm{Ai}}} +\newcommand{\Bi}{\ensuremath{\mathrm{Bi}}} +\newcommand{\BJ}[1]{\ensuremath{\mathrm{J}_{#1}}} +\newcommand{\memph}[1]{\mbox{\scriptsize\begin{tabular}{|l|}\hline \\ {\normalsize{$#1$}}\\ \\ \hline\end{tabular}}} +%\newcommand{\emp}[1]{\texttt{#1}} +\newcommand{\emp}[1]{$#1$} +% +%\newcommand{\tref}[1]{\ensuremath{[\mbox{#1}]}} +\newcommand{\dint}{\int \! \! \! \int} +\newcommand{\mperiod}{\ .} +\newcommand{\mperiodnospace}{.} +\newcommand{\mcomma}{\ ,} +%\checkandfixthelayout + +% See the ``Memoir customise'' template for some common customisations +% Don't forget to read the Memoir manual: memman.pdf + +%\title{TITLE OF BOOK} +%\author{NAME OF AUTHOR} +%\date{} % Delete this line to display the current date + +%% BEGIN TITLE + +\makeatletter +\def\maketitle{% + \null + \thispagestyle{empty}% + \vfill + \begin{center}\leavevmode + \normalfont + {\LARGE\raggedleft \@author\par}% + \hrulefill\par + {\huge\raggedright \@title\par}% + \vskip 1cm +% {\Large \@date\par}% + \end{center}% + \vfill + \null + \cleardoublepage + } +\makeatother +\author{NAME OF AUTHOR} +\author{NAME OF AUTHOR} +\title{TITLE OF BOOK} +\date{} + + + + + + + +\setcounter{chapter}{0} + + +%%% BEGIN DOCUMENT + +\begin{document} + +\let\cleardoublepage\clearpage + + +%\maketitle + + + + + + +%\frontmatter + +%\null\vfill + +%\begin{flushleft} +%\textit{NAME OF BOOK} + + +%© COPYRIGHT INFO + + +%ISBN--INFO + +%ISBN--13: +%\bigskip + + + +%ALL RIGHTS RESERVED OR COPYRIGHT LICENSE LANGUAGE + + + + +%\end{flushleft} +%\let\cleardoublepage\clearpage + +%\mainmatter +%\sloppy + +\chapter{Programmering i Python} +\noindent Detta �r ett laborationsh�fte i kandidatprojekt fysik: visualiseringsprojektet. + +Man f�rv�ntas i huvudsak utf�ra laborationsmomenten under rubriken 'Grundl�ggande Python' p� egen hand. F�r momenten under rubriken 'Mer avancerad Python' �r man mer v�lkommen att brett diskutera och samarbeta som man vill. F�rv�ntan �r att man under labben hinner l�sa alla uppgifter under 'Grundl�ggande Python', och att man antingen �ven hunnit med uppgifterna under 'Mer avancerad Python' eller, om labbtiden tagit slut, �tminstone har l�st igenom och f�rst�tt dem och kan f�rklara hur man hade t�nkt l�sa dem. N�r alla moment �r slutf�rda, eller labbtiden b�rjar ta slut, p�kalla laborationsassistenten f�r 'redovisning'. Man f�rv�ntas d� kunna f�rklara och motivera all kod man har skrivit. \textbf{Se till att du har alla program du skriver som svar p� de numrerade fr�gorna sparade till 'redovisningen'.} + +Fundera p� egen hand och s�k i dokumentationen n�r ni st�ter p� problem s� l�nge som det k�nns meningsfullt, men om ni k�nner att ni sitter fast, be laborationsassistenten om ledtr�dar / hj�lp. + + + +\section{Dokumentation och hj�lp} +\begin{itemize} +\item Slides ifr�n f�rel�sningen (finns p� Lisam) +\item http://docs.python.org/ +\item Tutorial: http://docs.python.org/3/tutorial/ +\item Standardbiblioteket: http://docs.python.org/3/library/ +\item Direkthj�lp: \pythoninline{help(...)}, \pythoninline{dir(...)} +\item Fr�gor och svar: http://stackoverflow.com/ \\ {\scriptsize t.ex. s�k: \emph{''merge python dictionaries''} $\rightarrow$ \pythoninline{z = \{**x, **y\}} \par} +\item K�r: \pythoninline{import this} +\item Python f�r vetenskap, scipy-modulen: http://scipy.org/ +\item Python f�r snabb behandling av numerisk data ($\sim$ matlab), numpy: http://www.numpy.org/ +\end{itemize} + +\section{Python-milj�n} + +B�rja med att komma �t Python-milj�n. Laborationsassistenten demonstrerar hur. + +\begin{shaded} +\begin{itemize} +\item[\circled{1}] Kontrollera att du kan k�ra Python-program genom att f� Python att skriva ut texten "Hello world!" +\item[\circled{2}] Ber�kna v�rdet av 1+1 +\end{itemize} +\end{shaded} + +\section{Grundl�ggande Python} + +\subsection{Aritmetik} +\begin{shaded} +\begin{itemize} +\item[\circled{3}] Man konverterar ifr�n Celsius till Fahrenheit med f�ljande ekvation: + $$ f = \frac{9c}{5} + 32$$ +D�r $f$ �r temperatur i Fahrenheit, och $c$ i Celsius. Skriv en funktion som tar $c$ som parameter och returnerar $f$. +\item[\circled{4}] Ut�ka funktionen i (3) till att ocks� kunna konvertera ifr�n en temperatur angiven i kelvin. Du f�r sj�lv v�lja hur du designar gr�nssnittet (parametrarna till funktionen), men det m�ste vara en och samma funktion som kan utf�ra b�da konverteringarna. +\item[\circled{5}] N�gon vill anv�nda Python f�r att numeriskt verifiera att ekvationerna + $$ (a+b)^2 = a^2 + 2ab + b^2$$ + $$ (a-b)^2 = a^2 - 2ab + b^2$$ +g�ller f�r $a=3,3$ och $b=5,3$. De har skrivit f�ljande program f�r att g�ra detta. Programmet inneh�ller dock ett antal fel. Korrigera dessa s� att programmet g�r vad som �r t�nkt. +\begin{python} +a = 3,3 b = 5,3 +a2 = a**2 +b2 = b**2 +eq1_sum = a2 + 2ab + b2 +eq2_sum = a2 - 2ab + b2 +eq1_pow = (a + b)**2 +eq2_pow = (a - b)**2 +print('First equation: %g = %g', % (eq1_sum, eq1_pow)) +print('Second equation: %h = %h', % (eq2_pow, eq2_pow)) +\end{python} +\end{itemize} +\end{shaded} + +\subsection{Fl�deskontroll} +\begin{shaded} +\begin{itemize} +\item[\circled{6}] Anv�nd funktionen i (4) f�r att skriva ut en tabell som sida vid sida visar temperaturen i Celsius ifr�n $-20$ till $+40$ i steg om 5, och motsvarande v�rden i Fahrenheit. +\item[\circled{7}] Ut�ka funktionen i (4) att kasta en Exception med texten "Kelvin temperature must be >= 0" om n�gon skickar in en negativ temperatur f�r konvertering ifr�n Kelvin. +\item[\circled{8}] Skriv en funktion som approximerar $\sin(x)$ med denna summa + $$ \sin(x) \approx x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + ...$$ +Som parametrar ska man f� skicka in ett v�rde p� x, och det antal termer i summan man vill ta med. Om antalet termer inte anges ska default vara 5. V�rdet som approximationen ovan av $\sin(x)$ resulterar i ska returneras. Tips: fakultet finns i standardbiblioteket. +\end{itemize} +\end{shaded} + +\subsection{Listor} +\begin{shaded} +\begin{itemize} +\item[\circled{9}] Skriv en funktion som fungerar som i uppgift (7), f�rutom att ist�llet f�r att bara ta en temperatur, tar den en lista av temperaturer och returnerar en d�r samtliga v�rden konverterats. Om konvertering sker ifr�n Kelvin och n�got v�rde i listan �r negativt s� ska fortfarande samma Exception kastas. +\item[\circled{10}] Ut�ka funktionen i (9) s� den inte bara opererar p� en enkel lista, utan hanterar en godtyckligt n�stlad lista av temperaturer(!) D.v.s. om den f�r [30.2, 40.7, [10.3, 20.5, [10.3, 17.6]], 18.7] s� ska funktionen returnera en lista p� samma format d�r respektive temperatur har bytts ut mot v�rdet i Fahrenheit. Du kan anv�nda testet \pythoninline{type(obj) == list} f�r att avg�ra om det �r en enskild temperatur som ska konverteras eller en lista av temperaturer. + +\item[\circled{11}] Skriv en funktion som tar en lista av str�ngar och skriver ut dessa, en per rad, omringad av en ram. D.v.s., om den f�r: \pythoninline{["Hello", "World", "in", "a", "frame"]} s� ska den skriva ut: +\begin{python} +********* +* Hello * +* World * +* in * +* a * +* frame * +********* +\end{python} +\end{itemize} +\end{shaded} + +\subsection{Klasser} +\begin{shaded} +\begin{itemize} +\item[\circled{12}] Skapa tre klasser f�r objekt som representerar en temperatur: CelsiusTemperature, KelvinTemperature, och FahrenheitTemperature. L�t de alla �rva en generell klass, Temperature. Alla klasser ska implementera metoden print\_temperature() f�r att skriva ut v�rdet p� temperaturen med enhet. Alla ska ha en konstruktor d�r man s�tter den temperatur som objektet representerar. + +\item[\circled{13}] Skapa en funktion som tar ett (f�r funktionen ok�nt) temperatur-objekt och returnerar ett Fahrenheit-objekt som representerar motsvarande temperatur korrekt konverterad till Fahrenheit. Du f�r dock inte l�sa detta med en if-sats eller motsvarande som testar typ-tillh�righeten p� det objektet som skickas in. Du ska ist�llet skapa metoder \emph{i klasserna} s� att exakt samma kod i konverteringsfunktionen fungerar oavsett vilken temperaturklass som det inskickade objektet tillh�r. + +\item[\circled{14}] Fyller det gemensamma arvet ifr�n Temperature n�gon funktion i koden du konstruerat i (13)? (I s� fall, vilken?) +\end{itemize} +\end{shaded} + +\subsection{Moduler} +\begin{shaded} +\begin{itemize} + +\item[\circled{15}] Skapa en egen modul i en separat fil \pythoninline{hello.py} som bara inneh�ller en funktion \pythoninline{print_message} som skriver ut \pythoninline{Hello world!}. Demonstrera att modulen fungerar genom att i en separat fil importera modulen och anroppa funktionen. + +\item[\circled{16}] Skapa en egen modul i en separat katalog som tillhandah�ller klasserna i f�rra uppgiften s� att de kan importeras ur modulen. L�gg �ven med temperaturkonverteringsfunktionen. N�r du �r klar ska f�ljande Pythonkod fungera och skriva ut \pythoninline{86 F} (extra decimaler efter 86 �r ok): +\begin{python} +import temperature +from temperature import CelsiusTemperature, KelvinTemperature, FahrenheitTemperature + +ctemp = CelsiusTemperature(30.0) +temperature.to_fahrenheit(ctemp).print_temperature() +\end{python} + +\end{itemize} +\end{shaded} + + +\section{Mer avancerad Python} + +\subsection{Semantisk analys} +\begin{shaded} +\begin{itemize} +\item[\circled{17}] Skriv en funktion som tar en str�ng och s�tter upp f�ljande datastruktur: en dictionary av sets, d�r nyckeln �r varje ord i texten, och motsvarande set inneh�ller alla ord som i texten har f�rekommit som n�rmast efterf�ljande detta ord inom samma mening, alla i lowercase. + +Dessutom: N�r du ser ett ord b�rja en mening s� ska det l�ggas till i set:et f�r nyckeln None. N�r du ser ett ord som avslutar en mening, l�gg till None i dess motsvarande set. + +Exempel: f�r texten: \pythoninline{This is a test text. The text is an example.} +Ska man f�: +\begin{python} + { None: {'this', 'the'}, + 'this': { 'is' }, + 'is' : { 'a', 'an' }, + 'test' : { 'text' }, + 'text' : { None, 'is'}, + 'the' : { 'text' }, + 'an' : { 'example' } + 'example' : { None } + } +\end{python} +\item[\circled{18}] Nedanst�ende kod laddar ner en l�ngre text baserad p� b�cker ifr�n Project Gutenberg och processar den till att bara inneh�lla ord + mellanslag + punkter. Anv�nd denna kod f�r att ladda ner denna text och k�r den genom funktionen i (17) och lagra resultatet i en variabel 'out'. Skriv nu ett program som slumpm�ssigt g�r igenom datastrukturen och genererar en ny text enligt f�ljande: (i) Tag ett slumpm�ssigt element i set:et n = out[None]; (ii) skriv ut detta element; (iii) sl� upp out[n] -- om det �r None, skriv ut en punkt -- och forts�tt sedan ifr�n (ii). Sluta efter 100 genererade meningar. +\begin{python} +from urllib.request import urlopen +import re +pattern1 = re.compile(r'\s+') +pattern2 = re.compile(r'[^a-zA-Z .]+') +url="http://norvig.com/ngrams/smaller.txt" +s = urlopen(url).read().decode('utf-8') +s = pattern1.sub(' ',s) +processed = pattern2.sub('',s) +\end{python} +\end{itemize} +\end{shaded} + +\subsection{Parsning} +\begin{shaded} +Laborationsassistenten tillhandah�ller tv� filer som h�r till elektronstrukturber�kningsprogrammet VASP. POSCAR �r en in-fil som beskriver atomstrukturen, och OUTCAR �r en fri-forms utfil med resultatet av ber�kningen. Strukturen p� filen POSCAR �r dokumenterad h�r: + http://cms.mpi.univie.ac.at/vasp/guide/node59.html +men formatet till�ter en massa alternativ vi bortser ifr�n h�r, s� f�lj ist�llet instruktionerna nedan f�r hur filen ska l�sas. + + \begin{itemize} +\item[\circled{19}] Skriv en parser som l�ser in POSCAR-filen och tar ut de atom�ra koordinaterna och lagrar i en tv�-niv�s n�stlad lista. Ditt program kan s�ledes hoppa �ver de f�rsta 5 raderna. Den 6:e raden m�ste l�sas, summan av talen som st�r h�r �r antalet atomer. Programmet ska sedan hoppa �ver rader tills tal i 3 kolumner dyker upp. H�r l�ses alla tal in rad-f�r-rad och listan byggs upp. N�r en rad f�r varje atom har l�sts in s� stoppas inl�sningen (efterf�ljande rader bortses ifr�n.) + +\item[\circled{20}] Skriv en parser som l�ser in OUTCAR-filen d�r du �tminstone f�rs�ker hantera filen generellt (s� att din kod inte bara fungerar f�r exakt detta exemplar av en OUTCAR). Din parser ska ta ut n�gra specifika nummer ur filen: Det \emph{sista} v�rdet som listas som 'free energy TOTEN', samt de tal som st�r angivna som "length of vectors" under "VOLUME and BASIS-vectors are now" l�ngst ner i filen. Du ska ta ut dessa genom enbart en enda genoml�sning av filen utan att l�sa in hela filen i en str�ng f�rst (t.ex., genom en loop �ver rader ur en �ppnad fil). +\end{itemize} +\end{shaded} +Namn och liu-id (\textbf{fyll i med bl�ckpenna}): +\strut\\ +\strut\\ +�r godk�nd p� laborationen. Laborationsassistentens underskrift, namnf�rtydligande och datum: +\strut\\ +\strut\\ +\underline{\strut\hspace{\linewidth}\strut} +\end{document} + -- GitLab