2015-06-11 2 views
1

Есть ли способ поставить приведенный ниже код в одну функцию? Или есть способ сделать его менее громоздким?Объединение функций нулевого аргумента

def getf(): 
    while True: 
     try: 
      s = raw_input('> ') 
      return float(s) 
     except ValueError: 
      print "Are you sure that's a number? Please enter a number" 

def cats_and_people(): 
    print "Hello. We are in a crisis and need your help to set a number of animals!" 
    print "First, let's set a number of cats!: " 
    cats = float(getf()) 
    print "Now let's set a number of people!: " 
    people = float(getf()) 
    if cats > people: 
     print ("\nToo many cats! The World is doomed!").upper() 
    else: 
     print ("\nNot enough cats! The World is doomed!").upper() 

cats_and_people() 
+0

Что вы подразумеваете под «менее громоздким», и как слияние этих двух функций с одним сделает его «менее громоздким»? –

+0

благодарит за комментарий. Я все еще новичок в питоне, и ответ от Райана прояснил мне кое-что.Теперь я понимаю, что если я объединю их вместе, это будет просто хуже –

ответ

0

Eugene!

Удивительно, что вы учитесь программировать!

В общем, все в порядке, если у вас есть что-то более чем в одной функции. На самом деле, вы должны сосредоточиться на создании как можно большего числа функций, если они несколько универсальны!

Это помогает структурировать части кода, которые могут помочь вам в много различных способов, лишь часть из которых являются:

1) Каждая функция делает конкретную вещь. Позволяет лучше визуализировать происходящее!

2) Это облегчает тестирование ваших функций, и когда тест не удается, вы сразу же знаете, какая часть вашего кода нуждается в работе.

3) Легче читать!

Нет ничего плохого в том, как вы получаете вход пользователя. В вашем коде есть несколько недостатков, но я также вижу некоторые хорошие вещи:

1) Вы правильно обработали свое исключение.

2) Ваши имена переменных довольно описательны!

3) Вы подтверждаете свой ввод - удивительный!

Некоторые проблемы:

1) Я думаю, что это просто ошибка форматирования, но вам нужно сделать отступ блока TRY правильно.

2) Вы используете float() дважды на пользовательском входе. Не нужно!

3) Вам не нужны ваши парнеры в последних двух заявлениях печати.

Это отличное начало. Держись! Не сдавайся! Вам нужно будет познакомиться с Python, прежде чем слишком беспокоиться о структуре вашего кода. Когда вы сможете понять много Python API (знаете, какие функции вам нужно использовать для выполнения определенных операций), вы сможете читать популярные библиотеки. Прочитайте интересующие вас библиотеки, и вы узнаете, как они структурируют свой код, их шаблоны дизайна и т. Д., Что добавит много вашего инструментального пояса.

Удачи и получайте удовольствие!

0

, если вы готовы отказаться от TRY блока вы могли бы сделать что-то вроде:

def cats_and_ppl(): 
    print(...) 
    cats = float(raw_input()) 
    print(...) 
    ppl = float(raw_input()) 
    if ...: 
    else..: 

, если вы хотите, чтобы проверить, что вход действительно номер, но вы не хотите, чтобы открыть еще один метод, мое предложение состоит в том, что вы открываете цикл while и ожидаете приемлемого ввода. что-то вроде:

while(x = raw_input()): 
    if isinstance(x, float): 
    break 
Смежные вопросы