2014-09-01 3 views
0

Ниже мой код:Удаление None и завершение в python?

def interact(): 

    d = c.split() 
    while True: 
     if d[0] =='date' and len(d) == 2: 
      print display_stats(d[1]) 
     elif c == 'q': 
      return 
     else: 
      print "Unknown Command: ",c 
     break 

Однако, когда я запускаю мой код, я получаю следующее с None:

Welcome to calculator 


Maximum Power Outputs: 

Building 1    351.2kW 
Building 2    7.0kW 
Building 3    275.9kW 
Building 4    269.1kW    
None 

Пожалуйста, помогите по фиксации кода и не удаляя None! Также в elif, если raw_input = 'x', команда x должна привести к завершению работы программы. Итак, как я могу исправить эту проблему?

+0

Является ли «Нет», исходящим из вашей функции display_stats? Что это за код? –

ответ

1

Если метод в Python не имеет инструкции return, возвращаемое по умолчанию значение равно None. Это то, что вы видите.

Чтобы этого не произошло, просто добавьте возвращаемое значение. Для вашей другой части, чтобы выйти из приложения, просто проверьте сначала, если человек хочет выйти, до начала остальной части цикла.

import sys 

def interact(): 
    print "Welcome to calculator" 
    print 
    c = raw_input("Command: ") 
    # Just do the check here, so you don't bother running the rest of the code 
    if c == 'x': 
     sys.exit() 
    print 
    d = c.split() 
    while True: 
     if d[0] =='date' and len(d) == 2: 
      print display_stats(d[1]) 
     elif c == 'q': 
      return 
     else: 
      print "Unknown Command: ",c 
     break 
    return '' # Return a blank string 
2

None, который вы видите, является результатом вашей функции display_stats(). Все функции Python возвращают значение, даже функции без явного выражения return; если у них нет инструкции return, возвращаемое значение равно None. Так это линия, которая печати None:

  print display_stats(d[1]) 

Изменить что:

  display_stats(d[1]) 

и None должны исчезнуть.

Что касается другого вопроса, заменить:

elif c == 'q': 

с:

elif c in ('q', 'x'): 

и что должны делать то, что вы ищете.

+0

Спасибо! Это сработало! – Yoo

+0

Просто спросите, почему это "elif c in ('q', 'x'):" вместо elif c == 'q' :? – Yoo

+0

@Pythonaddict - Я предположил, что вы хотели выйти с * либо * 'q' или 'x' в качестве команды, поэтому я показал вам, как проверить строку для нескольких значений сразу. Если вы хотите «x» выйти из программы, но не «q», тогда вам нужно просто «elif c == 'q»: '(в основном, заменить« x »на« q »в вашей существующей строке). – rmunn

1

Для того, чтобы программа выхода, и не удалить None:

import sys 

def interact(): 
    print "Welcome to calculator" 
    print 
    c = raw_input("Command: ") 
    print 
    d = c.split() 
    while True: 
     if d[0] =='date' and len(d) == 2: 
      display_stats(d[1]) 
     elif c == 'q': 
      return 
     elif c == 'x': 
      sys.exit() 
     else: 
      print "Unknown Command: ",c 
     break 

Никто не появляется, так как display_stats уже делает печать, а затем возвращает что-то - все функции делают, и вполне вероятно, что она возвращает None , который затем печатается в вашей функции взаимодействия: я просто удалил печать перед вызовом display_stats.

Смежные вопросы