Sathvik Babu Veligatla <sathvikveliga...@gmail.com> writes: > hi, > I am new to python, and i am trying to output the prime numbers beginning > from 3 and i cannot get the required output. > It stops after giving the output "7" and that's it. > > CODE: > a = 3 > l = [] > while True: > for i in range(2,a): > if a%i == 0: > l.append(1) > else: > l.append(0) > > if l.count(1) == 0: > print(a) > a = a + 2 > elif l.count(1) >> 0: > a = a + 2 > > > > Any help is appreciated, > Thank you.
As others have already noticed, the l.count(1) >> 0: is faulty. You probably meant l.count(1) > 0:, but else would be simpler. But then, once there is a 1 in l that never disappears, so after that it will never print any more numbers. You should put the l = [] AFTER the while True, so that you start with a new empty list every cycle. And then, putting 0 an 1's in a list and then counting how many 1's there are is quite inefficient. Just counting from the beginning would be more efficient. Like: a = 3 while True: count = 0 for i in range(2,a): if a%i == 0: count += 1 if count == 0: print(a) a = a + 2 else: a = a + 2 Which can be simplified to: a = 3 while True: count = 0 for i in range(2,a): if a%i == 0: count += 1 if count == 0: print(a) a = a + 2 And you effectively use the counter as a boolean, so replace is by a boolean. a = 3 while True: is_prime = True for i in range(2,a): if a%i == 0: is_prime = False # once we found a divisor, it is no use to continue break if is_prime: print(a) a = a + 2 Further optimizations are possible, for example use range(2,a/2) or even range (2, sqrt(a)). -- Pieter van Oostrum www: http://pieter.vanoostrum.org/ PGP key: [8DAE142BE17999C4] -- https://mail.python.org/mailman/listinfo/python-list