2012-10-05 2 views
-1

엘피프 원인 내 번호 목록을 업데이트 할 수 있도록 파이썬 코드를 작성하려면 어떻게해야합니까? 비어있는 빈 목록으로 시작한 다음 목록에서 사용자가 얼마나 많은 새로운 점수를 추가했는지 물어봐야합니다. 그런 다음 목록에 해당 숫자를 추가하십시오. 그런 다음 메뉴 시스템으로 돌아가서 질문해야합니다. 사용자가 목록에서 해당 숫자의 평균을 원하면 3을 누릅니다. 여기에 내 문제는 아래 코드는 elif 절에서 점수가 업데이트되고 있지만 일단 목록이 나오면 목록이 다시 비어있는 것입니다. 도와주세요!elif 절 내에서 목록을 업데이트하고 목록을 반환하는 방법

+0

<숙제가 있다고 가정> 교수님/강사가 변수 및 변수 전달 범위에 대해 이야기 해 주셨을 경우,이 두 가지가 코드와 문제를 상당히 빨리 정리하는 것 같습니다. –

답변

0

빈 목록을 루프 앞에 바인딩하는 문을 이동하십시오.

scores = [] 
while 1: 
    ... 
+0

나는 그것을 시도했지만 avgScores()를 호출하려고했을 때 여전히 "s + = scores [index] TypeError : + = : 'int'및 'list'"에 대해 지원되지 않는 피연산자 유형 –

+0

아마도 점수 목록에 목록을 추가하기 때문일 것입니다. 'scores.append (addScores())'는'addScores()'의 반환 값을 여러분의 점수 목록에 추가합니다. 'addScores()'는리스트를 반환합니다. '[3,4], [7,5], [3,4]]와 같은 목록의 목록을'scores '로 만든다. – Matt

0

귀하의 addScores 방법은리스트를 돌려 것처럼, Append 메서드는 하나의 요소에 대해, 대신 ELIF 문에 APPEND의 연장 사용으로 보인다.

또한 addScores 메서드는 추가 할 로컬 점수 목록을 인스턴스화하지 않으므로 인스턴스가 생성되지 않으므로 빈 목록을 반환합니다. 수정하고자하는 목록을 전달하거나, 그것이 반환하는 지역 목록을 가져야합니다. 현재는 어느 쪽도하지 않습니다.

0

우선 함수는 while 루프에 정의하면 안됩니다. 루프 밖에서 정의하고 인수를 전달하십시오. 점수 목록을 추적하는 명확한 방법은 프로그램의 모든 함수가 전역 변수를 액세스 할 수 있도록 전역 변수를 사용하는 것입니다. 내가 문을 제외하고/두 개의 시도를 추가

scores = [] 

def addScores(): 
    enteredScores = [] 
    while True: 
     numOfScores = input("How many new scores would you like to add: ") 
     try: 
      if int(numOfScores) > 0: 
       for i in range(int(numOfScores)): 
        newInput = input("Please enter a score: ") 
        enteredScores.append(newInput) 
       print(enteredScores) 
       return enteredScores 
      else: 
       print("Please enter a positive integer.") 
       continue 
     except ValueError: 
      print("Please enter a positive integer.") 

while True: 
    print("0 - Clear scores") 
    print("1 - Input more scores") 
    print("2 - Print scores") 
    print("3 - Average scores") 
    option = input("Please choose an option: ") 

    if option == 0: 
     scores = [] 
    elif option == 1: 
     scores += addScores() 
    elif option == 2: 
     print("Scores:", scores) 
    elif option == 3: 
     try: 
      avgScore = sum(scores)/len(scores) 
      print("Average:", avgScore) 
     except TypeError: 
      print("Invalid score contained in list.") 
    else: 
     print("Quitting current program.") 
     break 
    replay = input("Do you wish to continue? (Y/N)") 
    replay = replay.lower() 
    if replay == "y" or replay == "yes": 
     continue 
    else: 
     break 

print("Goodbye!") 

: 같은

귀하의 수정 된 코드는 볼 수 있었다. 프로그램에서 오류가 발생하고 언급 된 유형 (ValueError 및 TypeError) 중 하나에 해당하면 프로그램을 종료하는 대신 except 문과 함께 오류를 처리합니다. 만약 당신이 그들을 덮지 않은, 당신은 그들을 제거하고 프로그램이 잘 작동합니다. 또한 논리를 약간 정리했는데 원래는 재생 변수가 아무 것도하지 않았으므로 루프로 이동하여 이제 프로그램을 계속하거나 중단합니다.

+0

왜 전역 변수인가? 단순히 함수 인수로 전달할 수 있습니다. 또한 첫 번째 줄은 전혀 유용하지 않습니다. global 문은 변수 _이 함수 _가 전역 변수임을 선언하기위한 것입니다. – Bakuriu

+0

저는 글로벌 구문이 좀 더 깔끔하다고 생각합니다. 그러나 어느쪽으로 든 갈 수 있습니다. 첫 줄에 대한 메모를 보내 주셔서 감사합니다. 지금 알려 드리겠습니다. –

+0

Globals는 끔찍하며 사용하지 않아야합니다. 코드 규칙이 잘못되어 취약하고 관리하기 어려운 코드로 이어집니다. 파이썬의 Goto 문입니다. "전역"을 원하면 클래스와 init을 사용해야합니다. –

관련 문제