2017-12-18 3 views
0

비슷한 질문을 올렸지 만 올바른 대답을 얻지 못했습니다. 아마도 내 프로그램이 실행되는 방식에 대해 명확하지 않았기 때문일 수 있습니다.Python : 다른 함수의 목록에 추가

나는 간단한 프로그램 선물을 쓰고 있는데 다른 기능의 사전에있는 사람에게 선물을주고 싶다.

def main(): 

    print("Select: ") 

    print("\n\n\t1. Gifts") 

    selection_1 = input() 

    if selection_1 == "1": 
     people_list() 
     return selection 

    else: 
     print("Type a number for selecting.") 
     main() 

def people_list(): 

    people = {"Elena":["book","candy","sweater"], 
      "Daria":["healthy food"], 
      "Petra and Rok":[], 
      "Nikola":["cheese"], 
      "Matija + Elena":["vacation"], 
      "Christian":["chocolate"]} 

    print ("""Select a person to show their gifts: 

     1. Elena 
     2. Daria 
     3. Petra and Rok 
     4. Nikola 
     5. Matija + Elena 
     6. Christian 

    """) 
    gifts(people) 


def gifts(people): 

    selection_2 = input() 

    if selection_2 == "1": 
     person = people["Elena"] 
     print(people["Elena"]) 
     manage_gifts(person, people) 
     return person 
    elif selection_2 == "2": 
     person = people["Daria"] 
     print(people["Daria"]) 
     manage_gifts(person, people) 
     return person 
    elif selection_2 == "3": 
     person = people["Petra and Rok"] 
     print(people["Petra and Rok"]) 
     manage_gifts(person, people) 
     return person 
    elif selection_2 == "4": 
     person = people["Nikola"] 
     print(people["Nikola"]) 
     manage_gifts(person, people) 
     return person 
    elif selection_2 == "5": 
     person = people["Matija + Elena"] 
     print(people["Matija + Elena"]) 
     manage_gifts(person, people) 
     return person 
    elif selection_2 == "6": 
     person = people["Christian"] 
     print(people["Christian"]) 
     manage_gifts(person, people) 
     return person 
    else: 
     print("Choose a person from the list!") 
     people_list() 
    return person 

def manage_gifts(person, people): 


    print(""" 
     1. Add gift""") 

    gift_option = input() 

    if gift_option == "1": 
     print("\nType the gift you would like to add?\n") 
     new_gift = input() 
     people[person].append(str(new_gift)) 
     print("Gift added: ", people[person]) 

main() 

내가 목록에서 선택한 '사람'에 새로운 선물이 추가되었음을 알고 싶습니다. 내가 오류는 다음과 같습니다

Traceback (most recent call last): 
    File "E:/Python/Vaje_Book/Gifts.py", line 92, in <module> 
    main() 
    File "E:/Python/Vaje_Book/Gifts.py", line 10, in main 
    people_list() 
    File "E:/Python/Vaje_Book/Gifts.py", line 36, in people_list 
    gifts(people) 
    File "E:/Python/Vaje_Book/Gifts.py", line 46, in gifts 
    manage_gifts(person, people) 
    File "E:/Python/Vaje_Book/Gifts.py", line 89, in manage_gifts 
    people[person].append(str(new_gift)) 
TypeError: unhashable type: 'list' 

는 당신의 도움을 주셔서 감사합니다. gifts(people)에서

+0

당신은 몇 가지 새로운 변수 목록에서 값을 취득하고 new_gift를 추가 한 다음 다시 업데이트해야합니다. BTW 사전을 전달하려면 함수 manage_gift가 정의 된 인수에서 **를 사용하십시오. – babygame0ver

+0

내가 수집 할 수있는 것부터'gifts = '에있는'person = people [ "Elena"]''person = "Elena"'등으로 변경하고 싶다.'person'을 그냥 이름으로하고 싶다. 당신이'사람들 '을 들여다 볼 수 있도록. 대신,'사람들 [ '엘레나']는 이미 가지고있는 선물을 돌려주고 있습니다. – roganjosh

답변

0

: 당신이 person = people["Elena"]을 수행 할 때, 다음 person 목록 유형입니다
. manage_gifts(person, people)에서 다음

은 : 당신이 people[person].append(str(new_gift))을 수행 할 때 사람이 목록이기 때문에
다음 오류 TypeError: unhashable type: 'list' 논리적 발생합니다. 문자열이어야합니다.

나는 gifts(people)에서 person = people["Elena"]person = "Elena"으로 바꿔야한다고 생각합니다. 그리고 다른 과제는 person 변수에 대해서도 마찬가지입니다.

그러나이 코드를 해결하기 위해 다른 실수 있습니다 :
- main()
내부 main()를 호출하지 않는 것은 - main()

0

에 아무것도 반환하지 않는 것은 내가 의견을 충분히 담당자 없지만 당신은 주 기능의 끝에 main()를 부르는 것이 좋은 형태가 아님을 알아야합니다. 파이썬은 꼬리 호출 최적화를 수행하지 않으므로 결국에는 스택이 부족 해지고 그런 식으로 충돌합니다. 모든 것을 while 루프에 넣으십시오. 예 :()

데프 주 :

while True: 
    print("Select: ") 

    print("\n\n\t1. Gifts") 

    selection_1 = input() 

    if selection_1 == "1": 
     people_list() 
     return selection 

    else: 
     print("Type a number for selecting.")