m = 100 # integer to apply the conjecture on n = m while n != 1: print(n, end=", ") if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 print(1) # 1 was not printed print(m, "is OK") limit = 10 m = 1 while m <= limit: n = m while n != 1: if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 print(m, "is OK") m += 1 for m in range(111, 98, -2): print(m, end=" ") start, stop = 99, 110 for m in range(start, stop + 1): n = m while n != 1: if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 print(m, "is OK") mixed_list = [3, 5.14, "hello", True, [5], range] print(mixed_list, type(mixed_list)) mixed_list[0] mixed_list[2] mixed_list[-1] mixed_list[-2] == mixed_list[2] mixed_list[1:3] mixed_list[:2] mixed_list[1:] mixed_list[:-2] mixed_list[:1] mixed_list[7:8] mixed_list[7] mixed_list + [1, 2, 3] mixed_list mixed_list = mixed_list + [1, 2, 3] mixed_list numbers = [10, 3, 2, 56] numbers sum(numbers) sum(['hello','world']) len(numbers) len(['hi','hello']) print(sorted(numbers)) print(numbers) print(numbers.sort()) print(numbers) mixed_list for item in mixed_list: if type(item) == str: print(item) for i in range(len(mixed_list)): print(i) if type(mixed_list[i]) == str: print(mixed_list[i]) print(i) i = 0 # important! while i < len(mixed_list) and type(mixed_list[i]) != int: if type(mixed_list[i]) == str: print(mixed_list[i]) i += 1 print(i) [x ** 2 for x in range(1, 11)] [x ** 0.5 for x in range(1, 21) if x % 2 == 1] l = [] l += [1] l grades = [33, 55,45,87,88,95,34,76,87,56,45,98,87,89,45,67,45,67,76,73,33,87,12,100,77,89,92] avg = sum(grades)/len(grades) above = 0 for gr in grades: if gr > avg: above += 1 print(above, "grades are above the average", avg) avg = sum(grades)/len(grades) above = len([gr for gr in grades if gr > avg]) print(above, "grades are above the average", avg) def max2(a,b): if a >= b: return a else: return b def min2(a,b): if a <= b: return a else: return b def max3(a,b,c): if a >= b and a >= c: return a elif b >= a and b >= c: return b else: return c def max3v2(a,b,c): max_ab = max2(a,b) return max2(max_ab,c) print(max2(5,10)) print(min2(5,10)) print(max3(5,10,10)) print(max3v2(5,10,10)) %timeit max3(100,45,67) %timeit max3(45,67,100) %timeit max3v2(100,45,67) %timeit max3v2(45,67,100) def is_perfect(n): ''' is_perfect(integer) -> bool Return True iff n equals the sum of its divisors ''' if n == sum(divisors(n)): return True else: return False help(is_perfect) def divisors(n): ''' divisors(integer) -> list of integers Return the proper divisors of n (numbers less than n that divide evenly into n). ''' return [div for div in range(1,n) if n % div == 0] def is_perfect(n): ''' is_perfect(integer) -> bool Return True iff n equals the sum of its divisors ''' return n == sum(divisors(n)) print("perfect numbers in range(1,1000)\n") print([n for n in range(1,1001) if is_perfect(n)]) def divisors2(n): divs = [] for m in range(2,round(n * 0.5)):#1 and n**0.5 will be handled separately. why? if n % m == 0: divs += [m, n // m] divs += [1] # 1 surely divides n return divs print(divisors(6)) print(divisors2(6)) %timeit -n 100 divisors(10**4) %timeit -n 100 divisors2(10**4)