#python #for-loop #if-statement #infinite-loop #break
#python #for-цикл #if-оператор #бесконечный цикл #перерыв
Вопрос:
Предполагается, что функция загружает список и выводит сумму первого и последнего простых чисел в списке. Я написал это так, чтобы был создан новый список, и идея заключается в том, что к нему добавляются только простые числа — если это не простое число, оно должно вернуться к началу этого цикла for. Я хочу, чтобы моя функция возвращалась к началу цикла for после
if L[i] % j == 0:
поскольку я хочу, чтобы к y добавлялись только простые числа, но я не думаю, что ‘break’ — это правильная вещь, которую нужно сделать здесь, поскольку при вызове функции у меня продолжает печататься весь мой список. Я пробовал ‘break’, ‘pass’, ‘continue’ и бесконечный цикл (хотя, возможно, я сделал это неправильно). Пожалуйста, помогите???
def first_plus_last_prime(L):
y = []
for i in range(len(L)):
if L[i] < 2:
break
for j in range(2, L[i]):
if L[i] % j == 0:
break
y.append(L[i])
print(y)
print(y[0])
print(y[-1])
t = y[0] y[-1]
return t
Комментарии:
1. Просто предложение: есть codereview.stackexchange.com . После исправления вашего кода рассмотрите возможность размещения его там. Помимо проблемы с самой реализацией, есть множество других вещей, которые можно улучшить.
Ответ №1:
Вы можете использовать оператор else:
def first_plus_last_prime(L):
y = []
for i in range(len(L)):
if L[i] < 2:
break
# Look for prime
for j in range(2, L[i]):
if L[i] % j == 0:
break
else:
y.append(L[i])
print(y)
print(y[0])
print(y[-1])
t = y[0] y[-1]
return t
Спасибо @UlrichEckhardt за информацию. https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops
Комментарии:
1. Я просто отвечаю на ваш вопрос о том, как поступить в случае, если число не является простым. Но почему вы прерываете цикл, когда находите 0 или 1? Если вы сделаете это, вы не будете просматривать весь список.
2. Python разрешает
else
после цикла for. Гораздо более элегантный и точно придуманный для подобных ситуаций. docs.python.org/3/tutorial /…3. @UlrichEckhardt Спасибо за информацию, я отредактировал ответ, чтобы показать этот путь.