2014-07-04 6 views
0

내 코드가 작동하지 않는 것 같습니다. 최대 1 개의 사전을 생성합니다. 다른 이름과 번호를 만들면 사전을 대체하여 현재 이름을 대체합니다. 이 바보 같은 질문 인 경우 간단한 파이썬 연락처 목록

list = {} 

def start(): 
    print "Welcome to Contact+ \n \nPlease enter your name: ", 
    name = raw_input() 
    print "Hi " + name + " would you like to check your current contacts or make new ones? \nTo make new contacts type in 'New' \nTo check current contacts type in 'Contacts'" 
    print "Go to: ", 
    choose = "" 
    choose = raw_input() 
    valid = False 
    while(not valid): 
     if choose == "'New'" or choose == "'new'" or choose == "New" or choose == "new": 
      new_function() 
     elif choose == "'Contacts'" or choose == "'contacts'" or choose == "Contacts" or choose == "contacts": 
      contacts_function() 

def new_function(): 
    global list 
    list = {} 
    print "\nPlease input the name: ", 
    contact_name = raw_input() 
    print "Please input the number: ", 
    contact_number = raw_input() 
    list.update({contact_name:contact_number}) 
    print "Contact created \n\nWould you like to make more contacts or check current contacts? \nTo make new contacts type in 'New' \nTo check current contacts type in 'Contacts'" 
    print "Go to: ", 
    choose = "" 
    choose = raw_input() 
    valid = False 
    while(not valid): 
     if choose == "'New'" or choose == "'new'" or choose == "New" or choose == "new": 
      new_function() 
     elif choose == "'Contacts'" or choose == "'contacts'" or choose == "Contacts" or choose == "contacts": 
      contacts_function() 

def contacts_function(): 
    global list 
    for keys,values in list.items(): 
     print "\n---------------------------------------------------------" 
     print str("Name: ") + str(keys) 
     print str("Number: ") + str(values) 
     print "---------------------------------------------------------\n" 
    print "Would you like to make more contacts or check current contacts? \nTo make new contacts type in 'New' \nTo check current contacts type in 'Contacts'" 
    print "Go to: ", 
    choose = "" 
    choose = raw_input() 
    valid = False 
    while(not valid): 
     if choose == "'New'" or choose == "'new'" or choose == "New" or choose == "new": 
      new_function() 
     elif choose == "'Contacts'" or choose == "'contacts'" or choose == "Contacts" or choose == "contacts": 
      contacts_function() 

start() 

미안 해요, 난 프로그래밍에 새로운 여전히 이니

다음은 내 코드입니다.

+0

왜 list라는 사전이 있습니까? – jonrsharpe

+0

'raw_input' 문은 while 루프 안에 있어야합니다. 명령의 철자를 잘못 입력하면 프로그램은 'while'상태로 무한 루프됩니다. 또한,'raw_input(). lower()'는'if '비교를 제한하는데 도움을 줄 것입니다. –

답변

0

당신은 new_function를 호출 할 때마다 list 재설정됩니다

새로운 사전에 가리 키도록 list를 리 바인드
def new_function(): 
    global list 
    list = {} 

, 그 줄을 제거합니다. 사전에 새 키를 추가하는 경우 여기에 global 줄이 필요하지 않습니다. 또한 아래

라인 :

list.update({contact_name:contact_number}) 

실제로 제대로 사전에 새 항목을 추가합니다. 하나 개의 항목을 추가 dict.update()를 사용하여 과잉 그러나, 당신은 대신 키에 할당 할 수 있습니다, 당신은 built-in type 마스킹하는 변수로 list를 사용하는 것은 나쁜 생각이다

list[contact_name] = contact_number 

참고. 더 좋은 이름은 contacts입니다.

1

때마다 new_function()가 호출 될 때, 당신은이 일을하고 있습니다 : 빈 사전에 목록의 내용을 대체

list = {} 

!

해당 행을 삭제하면됩니다. 당신이 프로그래밍에 익숙하기 때문에


것은, 내가 코드와 몇 가지 다른 문제를 지적 할 수 있습니다 : 입력이 유효하지 않은 경우 당신은 새로운 입력을 요구하지 않는

  • 그런 선택 항목 코드를 반복해서는 안됩니다.
  • 더 간단한 조건으로 선택 사항을 처리 할 수 ​​있습니다.

이 한 번 봐, 그리고 당신이 그것을 배울 수 있는지 : 당신은 다음 new_functioncontacts_function의 끝에서 그 반복되는 코드를 제거 할 수 있습니다

def start(): 
    ... 
    print "Hi " + name 
    while True: 
     print "Would you like to make more contacts or check current contacts? \nTo make new contacts type in 'New' \nTo check current contacts type in 'Contacts'" 
     print "Go to: ", 
     choose = raw_input().lower() 
     if choose == "new": 
      new_function() 
     elif choose == "contacts": 
      contacts_function() 

.

다른 사람들도 언급했듯이 list이라는 변수를 변수로 사용하는 것은 좋지 않은 아이디어입니다. list이 숨겨져 있기 때문입니다.

마지막으로 일반적으로 이와 같은 전역 데이터를 사용하는 것은 바람직하지 않습니다. 연락처 목록 사전을 start()으로 선언하고 new_functioncontacts_function의 매개 변수로 전달하는 것이 좋습니다.

+0

정말 고마워요 !!!! –