# Python Concepts/Quizzes/Functions & classes

```def parallel(x, y=1):
return float(x * y) / (x + y)

parallel(2)
```

 A syntax error as you cannot have assignments in the function argument An exception is raised as the second argument is missing when making a call to the function The result is approximately 0.6666 as the second argument is by default 1

2 With the two different definitions:

```def first(n, m):
"Bernoulli numbers computed as 1**m + 2**m + ... + n**m"
return sum(map(lambda n: n**m, range(1,n+1)))

def second(n):
# Bernoulli numbers computed as 1**m + 2**m + ... + n**m
return sum(map(lambda n: n**m, range(1,n+1)))
```

True False
The first line in the body of the "second" function is a comment
The first line in the body in the 'first' function will make a syntax error as you cannot have a string without an assignment inside a function.
"first.__doc__" contains the string "Bernoulli numbers computed as 1**m + 2**m + ... + n**m"
"second.__doc__" contains the string "Bernoulli numbers computed as 1**m + 2**m + ... + n**m"
The first definition has a more standard Python documentation than the second definition

3 With the two above code

True False
`help(first)` will display the line "Bernoulli numbers computed as 1**m + 2**m + ... + n**m"
`dir(first)` does not work as "first" is not a module

```class Mammal():
def number_of_legs(self):
return 4

class Dog(Mammal):
pass

class Human(Mammal):
def number_of_legs(self):
return 2

fido = Dog()
anna = Human()
```

we have:

True False
A class called "Mammal" is defined
Mammal is a class derived from Dog
Dog is a class derived from Mammal

5 With the above code we have:

True False
"anna" is an instance of "Human".
`fido.number_of_legs()` makes an error.

6 We have that

Is the name of the constructor method for a class
Is the method associated with extending a list with another list

```class Myint():
def __init__(self, integer):
self.integer = long(integer)
return long(str(self.integer) + str(integer))

a = Myint(1)
b = a + 3
c = b + 4
```

we have

True False
b = 4
b = 4L
b = 13L
c = 8
c = 8L
c = 17L
c = 134L

8 We have

True False
`True __add__ False` will result in "True"
In `True or False` the "or" is not the correct syntax

```for n in range(10):
if n == 2 or n == 6:
continue
elif n == 8:
break
print(n)
else:
print("Hello")
```

True False
The code will print 0 and 1 but finish after 2.
You cannot have "else" there: The indentation in the block is wrong
"Hello" will be printed several times

```def bum():
n = 1
while True:
if not n % 5 or 5 in map(int, list(str(n))):
yield 'bum'
else:
yield n
n += 1

bums = bum()
for b in bums:
print(b)
```

True False
Clearly there is missing a 'return' statement somewhere
Only integers from 1 to 5 are printed
As the "while" loop is infinite then the "for" will at one point experience a memory problem when the number of elements gets too big.
The if sentence examines whether 'n' is divisible with 5 or contains the decimal 5.