I719 Fundamentals of Python/lecture7
From ICO wiki
Advanced control flow
Task 1
Make a function that returns the sum of all elements in an iterable
>>> my_sum_function([2,3,5])
# 2 + 3 + 5
10
all, sum, any
all
, true if all elements are true
any
, true if any elements are true
Task 2
Find if all elements are false
opposite_all([False, False])
>>> True
Task 3
Implement all
function with a for loop
my_all([True, True])
>>> True
Break loops
Task 4
Implement any
with a for loop, use a break
statement
Error Handling
- When to raise an exception
- handling user input
Example: Addition calculator
this calculator is error prone. Users can put in a value that cannot be cast to an integer, which will cause this programs to raise an error.
def add_two_numbers(a, b):
return int(a) + int(b)
def main():
a = input('Write a number: ')
b = input('Write a number: ')
result = add_two_numbers(a, b)
print(result)
if __name__ == "__main__":
main
giving an error like this on bad user input
Write a number: a Write a number: 1 Traceback (most recent call last): File "calc.py", line 12, in <module> main() File "calc.py", line 7, in main result = add_two_numbers(a, b) File "calc.py", line 2, in add_two_numbers return int(a) + int(b) ValueError: invalid literal for int() with base 10: 'a'
With error handled
def add_two_numbers(a, b):
return int(a) + int(b)
def main():
a = input('Write a number: ')
b = input('Write a number: ')
try:
result = add_two_numbers(a, b)
except ValueError:
print('you must type a valid integer!')
else:
print(result)
if __name__ == "__main__":
main()
With checking before
def add_two_numbers(a, b):
return int(a) + int(b)
def main():
a = input('Write a number: ')
b = input('Write a number: ')
if a.isdigit() and b.isdigit():
result = add_two_numbers(a, b)
print(result)
else:
print('you must type a valid integer!')
if __name__ == "__main__":
main()
Splats
- dict as kwargs
- list as args
Task: Sum of all arguments
Solution
def sum_args(*args):
return sum(args)
if __name__ == "__main__":
print(sum_args(1, 3, 5)) # 9
Pass a list into the function
def sum_args(*args):
return sum(args)
if __name__ == "__main__":
print(sum_args(*[1, 3, 5])) # 9