2014 dxdy logo

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

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




 
 Python, простая прога, проблема с elif
Сообщение18.10.2020, 11:25 
Добрый день! С простейшей программой возникли проблемы, ругается на 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 
Аватара пользователя
elif и else должны иметь такой же отступ, как и соответствующий if.

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

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 12:54 
 !  kot-obormot, а еще, в дополнение к уже сказанному arseniiv, стоит заметить, что лучше использовать тэг подсветки синтаксиса, разбираться в коде с ним существенно удобнее. Выше в вашем сообщении я сделал это сам.

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:19 
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 
Аватара пользователя
Потому что одно с другим у вас сейчас не связано.

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:36 
Aritaborian в сообщении #1487690 писал(а):
Потому что одно с другим у вас сейчас не связано.

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

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 15:55 
Аватара пользователя
Вычислять полупериметр, а затем площадь нужно непосредственно внутри блока else.

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

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:07 
Точно, я все понял, какие же я невероятно глупые вопросы задал! Спасибо. Получилось так.
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя
kot-obormot в сообщении #1487700 писал(а):
#Кстати, можно было бы и без этого
Также можно обойтись одним if и одним else, сгруппировав условия существования треугольника. Ввод данных тоже можно сгруппировать.

 
 
 
 Re: Python, простая прога, проблема с elif
Сообщение18.10.2020, 16:43 
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
kot-obormot в сообщении #1487688 писал(а):
Насколько я понял, Python сильно меняется от версии к версии? Надеюсь, что в лучшую сторону?)
Ну, в разных частях по-разному сильно меняется, но вообще в лучшую, но это моё мнение, за всех пользователей не скажу. Вот в 3.8 много полезного привнесли, да и в 3.9. Как и в сам язык и «более общеупотребительную» стандартную библиотеку, так и в модули, которые используются тоже часто, но не в каждом проекте всеми. Поддержка сторонних тайпчекеров вот всё ширится, этому я лично рад как пользователь mypy. Но притом язык не меняется громадными темпами и не нужно так много менять в старом коде при обновлении одной-двух версий, и плюс создатели используют deprecation warning, когда что-то старое планируется убрать, чтобы все успели подлатать код. Не то чтобы это не было стандартной практикой в зрелых языках, но безусловно хорошо, что Python к таким относится.

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group