2016-10-22 3 views
-1

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

class C: 


    def set_gen(self): 
     self.birth_rate = input("whats your name") 
     menu() 

    def display_gen(self): 
     print (self.birth_rate) 
     menu() 


def menu(): 
     q=input("press a to ask or b to print") 
     if q==("a"): 
      RUN = C() 
      RUN.set_gen() 
     elif q==("b"): 
      RUN = C() 
      RUN.display_gen() 
     else: 
      menu() 
RUN = C() 
menu() 
+1

«Я не могу заставить его работать» - то, что именно вы можете не получить, чтобы работать ????? –

+0

Внутри класса вы запускаете 'menu()', которые снова запускают класс, которые снова запускают 'menu()' и т. Д. Это рекурсия. Сделайте это без рекурсии. – furas

+0

Читатели, как правило, не увидят запросы «как можно скорее» или, если на то пошло, «срочные». [Прочитайте это обсуждение] (http://meta.stackoverflow.com/q/326569), чтобы понять, почему - спасибо. – halfer

ответ

0

Я не уверен, что вы пытаетесь сделать, но вы создаете RUN много раз, так что вы ясно self.birth_rate в этом объекте - вы должны создать только один раз. Кроме того, вы должны установить значение по умолчанию для self.birth_rate, потому что вы можете использовать display_gen до set_gen и получить ошибку, потому что self.birth_rate еще не существует.

Кроме того, в классе вы запускаете menu(), которые снова запускают класс и запускают menu(). Это рекурсия. Лучше использовать цикл while True.

class C: 

    def __init__(self): 
     # default value at start 
     self.birth_rate = None 

    def set_gen(self): 
     self.birth_rate = input("whats your name: ") 

    def display_gen(self): 
     print(self.birth_rate) 

# ---------------------------------------------------- 

def menu(): 

    # create object only once 
    run = C() 

    # endless loop till you press `q` 
    while True: 

     q = input("a = ask, p = print, q = quit: ") 

     if q == "q": 
      break # exit `while` loop 
     elif q == "a": 
      run.set_gen() # set value in object 
     elif q == "p": 
      run.display_gen() # print value in object 

# ---------------------------------------------------- 

menu() 
1
class C: 

    def set_gen(self): 
     self.birth_rate = raw_input("whats your name: ") 

    def display_gen(self): 
     print (self.birth_rate) 



def menu(): 
     RUN = C() #create a C object 
     while True: 
      q=raw_input("press a to ask or b to print: ") 

      if q==("a"): 
       RUN.set_gen() 
      elif q==("b"): 
       RUN.display_gen() 





menu() #Call the main function 
Смежные вопросы