Python

Простые числа.Напишите программу

Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне от a до b .

Входные данные
Входная строка содержит два натуральных числа, a и b . Гарантируется, что a ≤ b .

Выходные данные
Программа должна вывести в одной строке через пробел все простые числа на отрезке [ a , b ] . Если таких чисел нет, программа должна вывести 0.

Примеры
входные данные
20 30
выходные данные
23 29
входные данные
24 28
выходные данные
0
 def is_prime(n): # эффективная проверка числа на простоту
if n < 2: return False
if n % 2 == 0: return n == 2
i = 3
while i * i
Vaso Soselia
Vaso Soselia
65 666
Лучший ответ
Алексей Ештокин Прокомментировать, что да как и как запустить?
Чем такое решение лучше/хуже?
 a, b = map(int, input().split()) 
ls = []
for i in range(a, b + 1):
if all(i % n != 0 for n in range(2, i)):
ls.append(str(i))
if len(ls):
print(' '.join(ls))
else:
print(0)
Я питон не особо хорошо знаю, пытаюсь вникнуть, но тут из-за отступа сразу ошибка. Пиз**ц полный.. возможно онл. компилятор ггг...

Надо просто ввести числа для запуска, без них это пустая функция.
у вас в функции аргументы передаются через n которая появляется при вызове в принте.. это уже i.. i нигде не вводится.. что это?

Второе решение вроде как хуже, там массив.. для js это плохо.
Но оно чище и понятнее, но не для меня. МАР это конструктор. который трансформирует.. Int тип данных, инпут и есть ввод, сплит как раз
Алексей Ештокин как раз режет.
Алексей Ештокин Он точно висит, процессор вообще не работает.
Почему так. Вход в другом месте..
По идее, вызывается функция, она отрабатывает и затем уже принт срабатывает и выводит в консоль результат..
Возможно вход в 11 строчке и тогда понятно почему зависает..
Vaso Soselia Это бинарный * - умножение. А унарный - деструктуризация. Т.е. превращение списка в набор параметров функции:
 print(*[1, 2, 3, 4]) 
выполняется как:
 print(1, 2, 3, 4) 
В JS деструктуризация тоже есть и записывается троеточием: ...
 Math.min(...[1, 2, 3, 4]) // это JS-код для примера 

Конструкция:
 [i for i in range(a, b + 1) if is_prime(i)] 
это генератор списка. Эквивалент:
 lst = []
for i in range(a, b + 1):
if is_prime(i):
lst.append(i)
or в Python работает точно так же, как || в JS: если первый аргумент не false (т.е. генератор вернул не пустой массив), возвращается значение первого аргумента; если false (пустой массив) - возвращается второй аргумент (массив [0]).
Vaso Soselia
 a, b = map(int, input().split()) 
Предположим, вводим:
10 20
Выражение input().split() возвращает:
['10', '20']
map применяет функцию int к каждому элементу массива:
[10, 20] (map возвращает не массив, а итератор, но суть не меняется)
элементы массива присваиваются переменным:
a = 10 и b = 20
Алексей Ештокин ввод аргументов через пробел, для работы надо тыкнуть run. если кому надо.
Пример тык f9 и ввести 10 30 .. в консоли (черное поле)
С ситом Эратосфена, что быстрее:
 import math 
while True:
a, b = map(int, input("a b » ").split())
if b < a: a, b = b, a
primes = [True for k in range(b + 1)]
primes[0] = primes[1] = False
for k in range(2, math.ceil(math.sqrt(b))):
if primes[k]:
l = b // k + 1
for m in range(2, l):
primes[m * k] = False
k, l = 0, 0
if a < 3: print('%10d' % (2), end = ''); k, l, a = 1, 1, 3
if a % 2 == 0 and a != 2: a += 1
for x in range(a, b + 1, 2):
if primes[x]:
print('%10d' % (x), end = ''); k += 1; l += 1
if k == 5: print(); k = 0
if k: print()
print(str(l) + ' numbers' if l != 1 else '1 number')
Только это вывод не через дурацкие пробелы, а в виде аккуратной таблицы:
 a,b = int(input()),int(input())  
total = 0
for i in range(a,b+1):
count = 0
for j in range(1,b+1):
if i % j == 0:
count += 1
if count == 2:
print(i,end=' ')
total += 1
if total == 0:
print(total)
Слава Морозов ОШИБКА Traceback (most recent call last):line 1, in <module>
a,b = int(input()),int(input())
ValueError: invalid literal for int() with base 10: '24 28'