Написание программы Python, которая использует циклы для реализации различных алгоритмов - PullRequest
0 голосов
/ 21 июня 2020

Я пишу программу python для класса, но все время получаю эти синтаксические ошибки и не могу их понять. Цель состоит в том, чтобы реализовать алгоритм в Python, чтобы он правильно устанавливал значения min1 и min2, которые должны содержать два наименьших значения в списке, хотя и не обязательно в таком порядке. Предполагается, что код основан на этом псевдо:

min1 ← list0
min2 ← list1
for each item in list
   if item < min1
   then if min1 < min2
      then min2 ← item
      else min1 ← item
   else if item < min2
      then min2 ← item
output: min1, min2

Вот мой python код, в котором я получаю синтаксические ошибки:

list = [4, 5, 1, 9, -2, 0, 3, -5] 
min1 = list[0]
min2 = list[1]
  for item in list :
    if item < min1 :
      if min1 < min2 :
        item = min2
    else :
      item = min1 
    else :
      if item < min2 :
        item = min2

    print(min1, min2)
    return(min1, min2)

Этот код возвращает: min1 = 4, min2 = 5, что неверно :). Буду очень признателен за любую помощь и совет, так как я новичок в Python. Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вы назначаете элемент везде. Я так понимаю, вы действительно хотите назначить min1 и min2? Вы не меняете их после инициализации. Поэтому их пока 4 и 5.

0 голосов
/ 21 июня 2020

Строки должны иметь правильный отступ (примечание: рекомендуемое количество пробелов на отступ - 4) :

list = [4, 5, 1, 9, -2, 0, 3, -5] 
min1 = list[0]
min2 = list[1]
for item in list:
    if item < min1:
        if min1 < min2:
            item = min2
        else:
            item = min1 
    else:
        if item < min2:
            item = min2
    print(min1, min2)
    return(min1, min2)

Кстати, не рекомендуется называть переменные именами встроенных типов.

Лучше изменить это и, возможно, вернуть функцию item, а вот более чистая форма вашего код:

def func(lst):

    min1 = lst[0]
    min2 = lst[1]

    for item in lst:
        if item < min1 < min2:
            item = min2
            
        elif item < min1:
            item = min1
            
        elif item < min2:
            item = min2
            
        print(min1, min2)
        return(item)


lst = [4, 5, 1, 9, -2, 0, 3, -5]
func(lst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...