#python #list #numbers #compare #primes
#python #Список #числа #Сравнить #простые числа
Вопрос:
Я пытаюсь создать программу, которая находит простые числа, используя списки в Python 3.3.2. Что я пытаюсь сделать, это взять ОДИН элемент из ns
и разделить его на ВСЕ элементы из b
.
Это то, что у меня есть (не работает):
b = [1]
ns = [1]
while 1 == 1:
if ns[-1] / b[:] == 1 or ns[-1]:
print (ns[-1])
ns.append(ns[-1] 1)
b.append(b[-1] 1)
else:
print ("No prime found.")
И это ошибка, которую я получаю:
if ns[-1] / b[:] == 1 or ns[-1]:
TypeError: unsupported operand type(s) for /: 'int' and 'list'
Я понимаю, почему эта операция невозможна (деление целого элемента из списка на другой полный список просто не работает), и мне было интересно, есть ли какой-либо способ достичь моей цели.
Спасибо за любую помощь.
Комментарии:
1. вы продвинулись дальше, помог ли мой ответ?
2. Не совсем. Я не очень разбираюсь в Python (или любом другом языке программирования). Тем не менее, спасибо за помощь.
Ответ №1:
Вы не можете разделить целое число и список. Что вы могли бы сделать, так это использовать понимание списка. ДЕМОНСТРАЦИЯ:
>>> ns = [1,2,3]
>>> b= [7,9,12,13]
>>> # divide last element of ns by all elements of b
...
>>> [float(ns[-1])/item for item in b if item]
[0.42857142857142855, 0.3333333333333333, 0.25, 0.23076923076923078]
Первый элемент нового списка равен 3/7, второй элемент равен 3/9 и так далее. if item
Проверка существует для того, чтобы убедиться, что вы не делите на ноль.
редактировать: на самом деле вы могли бы иметь в виду что-то другое, то есть деление одного элемента из ns
на каждый элемент из b
последовательно. Демонстрация для ns[-1]
:
>>> ns = [1,2,3]
>>> b = [1,2,3]
>>> sol = ns[-1]
>>> for item in b:
... sol = float(sol)/item
...
>>> sol
0.5
sol равно ((3/3)/2)/1
Кроме того, ваш while
цикл никогда не закончится. Вы уверены, что хотите этого?