#!/usr/bin/python3
# coding=utf-8
# La première ligne sert pour python (et ipython) 2, qui n'aiment pas
# les caractères non ASCII.

def vowels_no_in_word (word):
    r = 0
    for c in word:
        if is_vowel (c):
            r = r + 1
    return r

def is_vowel_written_in_a_less_nice_way (c):
    if c in "aeiouyAEIOUYèìòùáéíóúýäëïöüÿ":
        return True
    else:
        return False

def is_vowel (c):
    return c in "aeiouyAEIOUYèìòùáéíóúýäëïöüÿ"

def is_upper (c):
    return c.upper () == c

def recursive_fibo (n):
  if n < 2:
    return n
  else:
    return recursive_fibo (n - 2) + recursive_fibo (n - 1)

def print_recursive_fibo ():
    i = 0
    while True:
        print (recursive_fibo (i))
        i = i + 1

def print_fibo ():
    d = dict ({0: 0, 1: 1})
    print (d[0])
    print (d[1])
    i = 2
    while True:
        fibo_i = d[i-2] + d[i-1]
        d[i] = fibo_i
        print (fibo_i)
        i = i + 1

# Une version paramétrique mais efficace, qui
# utilise un dictionnaire interne comme print_fibo
def fast_fibo_version_obtenue_par_modification (n):
    d = dict ({0: 0, 1: 1})
    i = 2
    while True:
        fibo_i = d[i-2] + d[i-1]
        if i == n:
            return fibo_i
        d[i] = fibo_i
        i = i + 1

def fast_fibo_version_jolie (n):
    d = dict ({0: 0, 1: 1})
    for i in range(2, n + 1):
        fibo_i = d[i-2] + d[i-1]
        d[i] = fibo_i
    return d[n]

def print_multiplication_table ():
    for i in range (1, 11):
        for j in range (1, 11):
            print (str (i) + " x " + str (j) + " = " + str (i * j))
