In [1]:
# This is hello_who.py
def hello(who):
print("Hello {}!".format(who))
if __name__ == "__main__":
hello("mamma")
In [2]:
# This is hello_who.py # <-- i commenti iniziano con `#`
# possono essere all'inizio o a fine riga
def hello(who): # <-- la funzione di definisce con `def`
print("Hello {}!".format(who)) # <-- la stampa con `print` e le stringhe con `format`
if __name__ == "__main__": # <-- [verifica di esecuzione e non di import](https://docs.python.org/2/library/__main__.html)
hello("mamma") # <-- invoco la funzione con il valore
Le classiche sono:
<TAB>
: settate il vostro editor!Le convenzioni per le docstring
sono descritte nel PEP 257
in particolare:
Mie convenzioni:
In [9]:
import random
def check_value_and_multiply(n, m):
"""
Verifica il valore di n in un intervallo
e lo moltiplica per m.
Se n > 30 allora restituisce un codice di errore in un numero negativo.
ATTENZIONE: non è bene usare codici di errore nello stesso canale dove
sarebbero arrivati i dati corretti, si useranno in futuro le eccezioni.
Ora ci serve come esempio.
"""
if n < 10:
print("n minore di 10")
elif n > 30: # elif per gestire else+if, questo sostiuisce anche lo switch/case
print("n troppo grande")
n = -1
else:
print("un buon valore di n = {}".format(n))
return n*m
def main():
while True:
print("stiamo sorteggiando n")
n = random.randint(1, 50)
rv = check_value_and_multiply(n, 3)
print("Il risultato è = {}".format(rv))
if rv < 0:
print("Codice di errore {} rilevato".format(rv))
break
# if __name__ == "__main___":
# ATTENZIONE disabilito l'if perché nel notebook web non funziona ma voi lo dovete mettere
main()
In [ ]:
fib(0) --> 0
fib(1) --> 1
fib(2) --> 1
fib(3) --> 2
fib(n) --> fib(n-1) + fib(n-2)
In [11]:
import unittest
from fibo import calc_fibo
class TestMyFibo(unittest.TestCase):
def test_base(self):
self.assertEqual(calc_fibo(0), 0)
self.assertEqual(calc_fibo(1), 1)
def test_fibo_small(self):
self.assertEqual(calc_fibo(6), 8)
self.assertEqual(calc_fibo(8), 21)
def test_fibo_big(self):
self.assertEqual(calc_fibo(20), 6765)
self.assertEqual(calc_fibo(30), 832040)
def test_negative(self):
with self.assertRaises(ValueError):
calc_fibo(-1)
def test_string(self):
with self.assertRaises(TypeError):
calc_fibo("ciao")
calc_fibo("12")
if __name__ == '__main__':
unittest.main()
In [ ]:
import pytest
from myprogram import fib
def test_fib_ok_small():
assert fib(0) == 0
assert fib(1) == 1
assert fib(2) == 1
assert fib(3) == 2
def test_fib_raise_if_string():
with pytest.raises(TypeError):
fib("a")
def test_fib_raises_lt_zero():
with pytest.raises(ValueError):
fib(-1)