Задать вопрос

Как можно ещё сократить количество строк в коде?

Только изучаю Python.
Собственно вопрос в заголовке.
Вопрос возник потому, что изначаль кода было в два раза больше.

# coding=utf8
from math import sqrt

def fu(a, b):
    c = sqrt(a ** 2 + b ** 2)
    b = (a * b) / 2
    print c, "гипотенуза"
    print b, "площадь"

def fu1():
    'Функция проверяет чтобы введённые данные были числом'
    a = raw_input("Введите число: ")
    while a == str(a):
        try:
            a = int(a)
        except ValueError:
            a = raw_input("Введите число: ")
    return a

def fu2():
    'Функция проверяет чтобы введённое число было больше нуля'
    a = fu1()
    while a <= 0:
        a = fu1()
    return a

fu(fu2(), fu2())
  • Вопрос задан
  • 432 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@lega
fu1 и fu2 можно объединить в
def fu2():
    while True:
        try:
            a = int(raw_input("Введите число: "))
            assert a > 0
            return a
        except (ValueError, AssertionError):
            pass
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
winordie
@winordie
Лучшая документация -- исходники
Работает только для целых неотрицательных чисел
from math import sqrt

def input_int(count):
    cathetus = raw_input('Введите число {}: '.format(count)) # python2
    # cathetus = input('Введите число {}: '.format(count)) # python3
    return int(cathetus) if cathetus.isdigit() else input_int(count)

def calculation(a, b):
    hypotenuse = sqrt(a ** 2 + b ** 2)
    square = float(a * b)/2 # updated, old: square = (a * b)/2
    return {'hypotenuse': hypotenuse, 'square': square}

result = calculation(input_int(1), input_int(2))
print("\nгипотенуза: {hypotenuse}\nплощадь: {square}".format(**result))

И функции все таки по человечески надо называть.
PS по поводу того что только с целочисленными работает - исходный вариант также работал только с целыми числами (a = int(a), а не a = float(a))
Ответ написан
@MiiNiPaa
Адекватно назовите функции и удалите комменты.
Ответ написан
@Quirel
fu1, сократил на одну строку, символы не считал)
def fu1():                                                                      
    while True:
        try:
            a = int(raw_input('Введите число: '))
            return a
        except ValueError:
            a = int(raw_input('Введите число: '))
Ответ написан
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Александр
1. Как уже говорили в одном из ответов Вам надо дать отличные названия и убрать комментарии. Есть такое правило, если есть кусок кода, который хочется прокомментировать, то стоит этот кусок выделить в отдельную функцию и дать ей хорошее названии
2. Функции нужно стремиться оформлять так чтоб они меньше побочных эффектов производили. Должна одна что-то спрашивать у юзера и выводить ему результат, а другие должны для нее выполнять вычислительную работу. У Вас же raw_input в одном месте, print в другом. Не зачем так писать.
3. Не обязательно в маленькой функции писать обработчик исключений. Вынесите это в высокоуровневый код.

Приведу аналогию с начальник-подчиненный. Начальник дает задачу , подчиненный берет ее и убеждается что понял ее, если что спрашивает уточняющие или сразу говорит "не могу выполнить, не хватает ...". Когда же он что-то делает, он не парится а хорошо ли плохо. Зато если вдруг что-то серьезное произошло, то он не парится на тему, а как бы это исправить, а просто уведомляет "Иван Иваныч, подшипники надо истерлись, надо бы купить новые" и это проблема начальника обратиться в другой отдел. От подчиненного все что было нужно уже имеется!
Ответ написан
Комментировать
@vintkor Автор вопроса
А так считается хорошо?
вместо
print c, "гипотенуза"
print b, "площадь"

Писать
print c, "гипотенуза","\n", b, "площадь"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы