-
Notifications
You must be signed in to change notification settings - Fork 1
/
ex14.py
163 lines (115 loc) · 4.83 KB
/
ex14.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
"""
Create a function for each of the following, using any means possible without cutting corners.( no using of built-in function - we have to try our best)
addition - this function takes two objects as argument, and returns their sum if they are numbers, that is a float or an int.
subtraction - this function takes two objects as argument, returns the result of subtracting the second from the first.
division - this function takes two objects as argument, returns the result from dividing the first by the second. Remember that zero division is not allowed thus check if the second is zero.
multiplication - this function takes two objects as argument, returns the product of the two.
Write a function, that takes a list of various objects as an argument, return a list of all the objects that are numbers ( that is integer and float).
Write a function taking a list of various objects as argument, return the number of each object in the list. (This is also known as the frequency counter)
Write a function that takes a list of integers as an argument, remove ( delete) any element that has the same parity as its index + 1 .( If the index + 1 is even and the element is even, remove the element. If element is odd and index + 1 is odd, remove element, except when the index is 0), looping n - 1 times, where n is the size of the list.
s = [2, 6, 18, 11, 4]
# 6 is removed - loop 1
# index of 6, + 1 = 2
s = [2, 18, 11, 4]
# 18 is removed - loop 2
# index of 18, + 1 = 2
s = [2, 11, 4]
# 11 is not removed - loop 3
# index of 11, + 1 = 2
s = [2, 11, 4]
# 4 is not removed - loop 4
# index of 4, + 1 = 3
# final output
s = [2, 11, 4]
Write a function that takes a list of integers as input, then return a list with the same parity as the first element.
"""
############################# part 1 #############################
# this function checks if the argument passed is a number
def is_number(a):
return type(a) in [int, float]
# the problem did not state what to return when either is not a number
# as such we'd return None
def addition(a, b):
# if is_number(a) and is_number(b):
# return a + b
# return None
return a + b if is_number(a) and is_number(b) else None
def subtraction(a, b):
return a - b if is_number(a) and is_number(b) else None
def division(a, b):
return a / b if is_number(a) and is_number(b) and not b == 0 else None
def multiplication(a, b):
return a * b if is_number(a) and is_number(b) else None
############################# part 2 #############################
# This function is supposed to return the number of different types of object
def filter_number(item=[]):
return [i for i in item if type(i) in [int, float]]
############################# part 3 #############################
def freq_counter(items=[]):
types = []
count = []
res = []
for item in items:
if type(item) not in types:
types.append(type(item))
size = len(types)
count = size * [0]
for item in items:
if type(item) in types:
count[types.index(type(item))] += 1
for i in range(size):
res.append((types[i], count[i]))
return res
############################# part 4 #############################
# def index_parity(items=[]):
# if len(items) < 2:
# return items
# i = 1
# while True:
# if i < len(items) - 1:
# if (i + 1) % 2 == items[i] % 2:
# items.remove(items[i])
# else:
# i += 1
# else:
# break
# return items
# def index_parity(items=[]):
# if len(items) > 1:
# i = 1
# while True and:
# if i >= len(items) - 1:
# break
# if (i + 1) % 2 == items[i] % 2:
# items.remove(items[i])
# else:
# i += 1
# return items
# def index_parity(items=[]):
# if len(items) > 1:
# i = 1
# while True and i < len(items) - 1:
# if (i + 1) % 2 == items[i] % 2:
# items.remove(items[i])
# else:
# i += 1
# return items
def index_parity(items=[]):
if len(items) > 1:
i = 1
while i < len(items) - 1:
is_same_parity = (i + 1) % 2 == items[i] % 2
# items.remove(items[i]) if is_same_parity else (i := i + 1) # py3.8
if is_same_parity:
items.remove(items[i])
else:
i = i + 1
return items
############################# part 5 #############################
def same_parity(items=[]):
first_item = items[0]
pars = [first_item, ]
for i in range(1, len(items)):
if first_item % 2 == items[i] % 2:
pars.append(items[i])
return pars