2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Python, простая прога, проблема с elif
Сообщение18.10.2020, 11:25 


27/09/19
189
Добрый день! С простейшей программой возникли проблемы, ругается на elif почему-то. Хочется узнать - почему же ругается? Понимаю, что можно было бы проще записать вообще без elif.

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
print('Определим значение площади треугольника по трем сторонам')
print('Введите значение одной из длин сторон треугольника, назовем ее буковой a')

a=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой b')

b=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой c')

c=float(input())

if a+b<=c:
        print('Такого треугольника не существует')
        elif a+c<=b:
                print('Такого треугольника не существует')
        elif b+c<=a:
                print('Такого треугольника не существует')
        else:
                print('Вычисляем полупериметр')

p=(a+b+c)/2

print(p)

print('Вычисляем площадь')

S=(p*(p-a)*(p-b)*(p-c))**0.5

print(S)


print('До новых встреч')

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 11:28 
Заслуженный участник
Аватара пользователя


06/10/08
6422
elif и else должны иметь такой же отступ, как и соответствующий if.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 12:16 
Заслуженный участник


27/04/09
28128
kot-obormot
На будущее: не забывайте пожалуйста приводить сообщение компилятора (и версию языка). То есть конечно у многих из нас стоит Python неизвестной версии (слава Диэдру, что по части elif он совсем практически не изменился за лето), но сохранять код в файл и натравливать на него питон — не так-то быстро. Или вчитываться в код тщательно, чтобы глаз не пробежал мимо тривиальных ошибок, которые ты сам не сделаешь (и потому глаз разучился их распознавать эффективно). Когда же сообщение от компилятора уже есть рядом с кодом, намного быстрее сообразить, в чём проблема, даже без запуска кода и без перечитывания его тщательно целиком в поисках неизвестной заранее читателю проблемы — и даже рассказать, как увидеть это в том сообщении самому (если вдруг его достаточно, но оно просто сформулировано непонятным языком). Удачи в изучении!

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 12:54 
Заслуженный участник


09/05/12
25179
 !  kot-obormot, а еще, в дополнение к уже сказанному arseniiv, стоит заметить, что лучше использовать тэг подсветки синтаксиса, разбираться в коде с ним существенно удобнее. Выше в вашем сообщении я сделал это сам.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:19 


27/09/19
189
Xaositect в сообщении #1487654 писал(а):
elif и else должны иметь такой же отступ, как и соответствующий if.

Спасибо, понятно. Исправил код. Теперь все работает!
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
        print('Определим значение площади треугольника по трем сторонам')
print('Введите значение одной из длин сторон треугольника, назовем ее буковой a')

a=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой b')

b=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой c')

c=float(input())

if a+b<=c:
            print('Такого треугольника не существует')
elif a+c<=b:
                print('Такого треугольника не существует')
elif b+c<=a:
                print('Такого треугольника не существует')
                print('Нарушаетс неравенство треугольника')
else:
                print('Вычисляем полупериметр')

p=(a+b+c)/2

print(p)

print('Вычисляем площадь')

S=(p*(p-a)*(p-b)*(p-c))**0.5

print(S)


print('До новых встреч')


 
выполняется, например при введенных $a=1$, $c=1$, $b=4$, то все равно программа вычисляет площадь?

-- 18.10.2020, 15:24 --

arseniiv в сообщении #1487661 писал(а):
На будущее: не забывайте пожалуйста приводить сообщение компилятора (и версию языка).

Хорошо, спасибо! Python 3.9. Насколько я понял, Python сильно меняется от версии к версии? Надеюсь, что в лучшую сторону?)

Pphantom в сообщении #1487672 писал(а):
kot-obormot, а еще, в дополнение к уже сказанному arseniiv, стоит заметить, что лучше использовать тэг подсветки синтаксиса, разбираться в коде с ним существенно удобнее. Выше в вашем сообщении я сделал это сам.

Хорошо, спасибо, учту!

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:25 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Потому что одно с другим у вас сейчас не связано.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:36 


27/09/19
189
Aritaborian в сообщении #1487690 писал(а):
Потому что одно с другим у вас сейчас не связано.

Спасибо! Видимо надо часть после else завернуть как-то в контейнер? (если так можно выразиться)

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:55 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Вычислять полупериметр, а затем площадь нужно непосредственно внутри блока else.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:02 
Заслуженный участник


12/07/07
4438
kot-obormot в сообщении #1487691 писал(а):
Видимо надо часть после else завернуть как-то в контейнер? (если так можно выразиться)
[В Python] Блоки выделяются отступами. После else всё, что должно выполняться в этом случае, должно иметь одинаковый отступ.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:07 


27/09/19
189
Точно, я все понял, какие же я невероятно глупые вопросы задал! Спасибо. Получилось так.
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
print('Определим значение площади треугольника по трем сторонам')
print('Введите значение одной из длин сторон треугольника, назовем ее буковой a')

a=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой b')

b=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой c')

c=float(input())

if a+b<=c:
                print('Такого треугольника не существует')
elif a+c<=b:
                print('Такого треугольника не существует')
elif b+c<=a:
                print('Такого треугольника не существует')
                print('Нарушается неравенство треугольника')
else:
                print('Вычисляем полупериметр')
                p=(a+b+c)/2
                print(p) #Кстати, можно было бы и без этого =)))
                print('Вычисляем площадь')
                S=(p*(p-a)*(p-b)*(p-c))**0.5
                print(S)
print('До новых встреч')


 

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:15 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
kot-obormot в сообщении #1487700 писал(а):
#Кстати, можно было бы и без этого
Также можно обойтись одним if и одним else, сгруппировав условия существования треугольника. Ввод данных тоже можно сгруппировать.

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:43 


27/09/19
189
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
print('Определим значение площади треугольника по трем сторонам')
print('Введите значение одной из длин сторон треугольника, назовем ее буковой a')

a=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой b')

b=float(input())

print('Введите значение еще одной из длин сторон треугольника, назовем ее буковой c')

c=float(input())

if a+b<=c or a+c<=b or b+c<=a:
            print('Такого треугольника не существует')
#elif a+c<=b:
                # print('Такого треугольника не существует')
# elif b+c<=a:
#               print('Такого треугольника не существует')
#               print('Нарушается неравенство треугольника')
else:
                print('Вычисляем полупериметр')
                p=(a+b+c)/2
                print(p) #Кстати, можно было бы и без этого =)))
                print('Вычисляем площадь')
                S=(p*(p-a)*(p-b)*(p-c))**0.5
                print(S)
print('До новых встреч')

 

 Профиль  
                  
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 23:11 
Заслуженный участник


27/04/09
28128
kot-obormot в сообщении #1487688 писал(а):
Насколько я понял, Python сильно меняется от версии к версии? Надеюсь, что в лучшую сторону?)
Ну, в разных частях по-разному сильно меняется, но вообще в лучшую, но это моё мнение, за всех пользователей не скажу. Вот в 3.8 много полезного привнесли, да и в 3.9. Как и в сам язык и «более общеупотребительную» стандартную библиотеку, так и в модули, которые используются тоже часто, но не в каждом проекте всеми. Поддержка сторонних тайпчекеров вот всё ширится, этому я лично рад как пользователь mypy. Но притом язык не меняется громадными темпами и не нужно так много менять в старом коде при обновлении одной-двух версий, и плюс создатели используют deprecation warning, когда что-то старое планируется убрать, чтобы все успели подлатать код. Не то чтобы это не было стандартной практикой в зрелых языках, но безусловно хорошо, что Python к таким относится.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group