2013-05-26 3 views
2

Всякий раз, когда я запускаю программу калькулятора, которую я создал, она работает нормально, но текст «None» продолжает отображаться, и я не знаю почему. Вот код:«None» продолжает отображаться при запуске моей программы

def add(): 
    print 'choose 2 numbers to add' 
    a=input('add this') 
    b=input('to this') 
    print a+b 
    return menu() 
def sub(): 
    print 'choose 2 numbers to subract' 
    a=input('subract this') 
    b=input('from this') 
    print b-a 
    return menu() 
def menu(): 
    print "hello, Welcome" 
    print "these are your options" 
    print "1. add" 
    print "2. sub" 
print menu() 
loop=2 
def sys(): 
    while loop==2: 
     a=input("please choose") 
     if a==1: 
      print add() 
     elif a==2: 
      print sub() 
     else: 
      return menu(),sys() 
print sys() 

Здесь выход:

hello, Welcome 
these are your options 
1. add 
2. sub 
None <-------------------------(this is what I'm talking about) 
please choose 

Если это помогает любому здесь код для моего готового калькулятора (она выглядит перепутались, когда я мимо него, но он работает при копировании и вставке)

def add(): 
    print 'choose 2 numbers to add' 
    a=input('add this') 
    b=input('to this') 
    print a+b 
def sub(): 
    print 'choose 2 numbers to subract' 
    a=input('subract this') 
    b=input('from this') 
    print b-a 
def mul(): 
    print 'choose 2 numbers to multiply' 
    a=input("multiply this") 
    b=input("by this") 
    print b*a 
def div(): 
    print 'choose what numbers your want to divide' 
    a=input('divide this') 
    b=input('by this') 
    print a/b 
def exp(): 
    print 'choose your number you want to exponentiate' 
    a=input('multiply this') 
    b=input('by the power of this') 
    print a**b 
def menu(): 
    print "hello, Welcome" 
    print "these are your options" 
    print "1. add" 
    print "2. sub" 
    print "3. mul" 
    print "4. div" 
    print "5. expo" 
    print "0. to end" 
menu() 
def sys(): 
    while True: 
     a=input("please choose") 
     if a==1: 
      add() 
      menu() 
     elif a==2: 
      sub() 
      menu() 
     elif a==3: 
      mul() 
      menu() 
     elif a==4: 
      div() 
      menu() 
     elif a==5: 
      exp() 
      menu() 
     elif a==0: 
      break 
     else: 
      return menu(),sys() 
sys() 
+0

Использование словаря вместо переключателя заявление. [link] (http://stackoverflow.com/a/60211/1097972) – iraycd

ответ

9

Это потому, что функция menu() это ничего не возвращает, по четкости Олт функцию в питона возвращает None

>>> def func():pass 
>>> print func() #use `print` only if you want to print the returned value 
None 

Просто используйте:

menu() #no need of print as you're already printing inside the function body. 

Новая версия sys() после удаления return menu() из add() и sub(). Вместо того, чтобы использовать return menu() внутри каждой функции, просто вызовите функцию menu() в конце while loop.

def sys(): 
    while True: 
     a = input("please choose") 
     if a == 1: 
      add() # call add(), no need of print as you're printing inside add() itself 
     elif a==2: 
      sub() 
     menu()  # call menu() at the end of the loop 

while loop==2 фактически оценивает loop==2 выражения первым, и если это True того while loop продолжается либо еще перерывы мгновенно. В вашем случае, поскольку вы не меняете значение loop переменной, чтобы вы могли просто использовать while True.

>>> loop = 2 
>>> loop == 2 
True 

Похожие: a basic question about "while true"

+0

Или, что более конкретно, menu() возвращает None, поэтому все, что возвращает menu(), возвращает None. – Patashu

+0

Я снял «печать» и только что использовал menu(), он работал для начального запуска, но после того, как он зациклился, «none» снова появился. (им жаль, если им не понятно правильно, как я сказал им, что все еще новичок в этом) – user2423223

+0

@ user2423223 см. мое обновленное решение, кстати, что используется этим условием 'loop == 2'? он всегда будет «Истиной». –

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