I'm trying to code in python to filter a list of the first n integers that when divided have a remainder of 1. However, it looks like it's not checking every integer in my list according to the print statements I have. I have no idea why. I'm just starting to learn code, so please be patient with me. I suspect its something obvious I'm not seeing.
Below is my code I have so far:
def main():
checkUpTo = 20
listOfInts = list(range(checkUpTo))
filterList = [3]
boolList = []
for d in filterList:
print("checking list: " + str(listOfInts) + " for rem=1 when divided by " + str(d))
for x in listOfInts:
print("checking: " + str(x))
isDivisible = checkIfDivisible(x,d)
if isDivisible==False:
listOfInts.remove(x)
print("got list: " + str(listOfInts))
print(listOfInts)
def checkIfDivisible(number,divisor):
remainder = number % divisor
print(str(number) + "%" + str(divisor) + "=" + str(remainder))
if number % divisor == 1:
return True
if number % divisor != 1:
return False
if __name__ == "__main__":
main()
Thanks for the help
edit: my output:
checking list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] for rem=1 when divided by 3
checking: 0
0%3=0
checking: 2
2%3=2
checking: 4
4%3=1
checking: 5
5%3=2
checking: 7
7%3=1
checking: 8
8%3=2
checking: 10
10%3=1
checking: 11
11%3=2
checking: 13
13%3=1
checking: 14
14%3=2
checking: 16
16%3=1
checking: 17
17%3=2
checking: 19
19%3=1
got list: [1, 3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19]
[1, 3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19]
not sure why it's not checking 1,3, etc.
Look at For loop,
listOfInts.remove(x)
removes element from list. Therefore, your list dose not have those element whose remainder is one.Lets understand what is hapening in for loop,
List contain element from 0 to 19.
for loop takes 0 and pass it to
checkIfDivisible
function.0%3=0 returns
False
.isDivisible == False
, solistOfInts.remove(x)
removes element from position 0.for loop now fetches next item, since we have removed item from 0 position now at 0 position we have element 1 at 1 position we have elemt 2 and so on.
therefore print statement doesnot display element 1.
checking: 0 0%3=0 False 0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] checking: 2 2%3=2 False 2 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]