2011-02-19 2 views
0

이 코드에 대한 도움을 주시면 감사하겠습니다. 결과를 출력하는 함수를 얻으려고합니다. 이 프로그램은 난수를 취해 그것이 짝수인지 홀수인지를 결정합니다. 그거야. 얼마나 많은 숫자가 홀수이고 얼마나 많은 수가 짝수인지에 대한 계산서를 제공해야합니다.Python 2.5의 함수에 문제가 있습니다 - 인수는 무엇이되어야합니다. "if"문이 적절한 경우; 어큐뮬레이터 작업하기

"tally_status_count"함수로 빌드하려고하지만 작동하지 않습니다. 원래 전역 변수로 'even_total'및 'odd_total'변수를 설정했지만 함수로 이동하려고 시도했습니다.

나는 분실했습니다. 어떤 도움을 주시면 감사하겠습니다.

감사

코드 :

import random 

even_total = 0 
odd_total = 0 

def main(): 

    print 'Number\tStatus' 
    print'______________' 

    for count in range (10): 
     number = random.randint(1, 10) 
     status = odd_even(number) 

     print number, '\t', status 

    tally_status_count(odd_even)   

#Function to determine odd or even status 
def odd_even(number): 
    if (number % 2) == 0: 
     status = 'Even' 
    else: 
     status = 'Odd' 
    return status 

#Function to tally odd and even counts 
def tally_status_count(odd_even): 

    even_total = 0 
    odd_total = 0 

    for status in range (status): 
     if status == 'Even': 
      even_total = even_total + 1 
     else:   
      odd_total = odd_total + 1 


    print 
    print 'The total count of even numbers is: ', even_total 
    print 'The total count of odd numbers is: ', odd_total 

main() 

답변

1

코드에 몇 가지 문제점이 있습니다.

문제점 1 : tally_status_count는 절대로 사용되지 않는 인수를 취합니다. 이것에는 아무 문제가 없지만, 이상하다는 것은 당신이하려는 일을하는 방법을 모를 수도 있음을 의미합니다.

문제 2 : tally_status_count는 존재하지 않는 변수 'status'를 사용합니다. 나는 당신이 아마 상태를 함수의 인자로 넘겨 줘야한다고 생각했다. ... 당신은 문제가이 문제를 해결하면

def tally_status_count(status): 

, 당신은 문제 3, 끝낼

문제 3 :이 경우, 함수 정의는 다음과 같아야에 대한 루프, 부정. 이것은 :

for status in range (status): 

난센스이며 작동하지 않습니다. range()는 정수를 취하고 정수 목록을 반환하는 함수입니다. 'status'가 문자열이면 range()에 사용할 수 없습니다.

문제 4 : 마지막 임의의 숫자에 대한 상태 만 표시되며 모든 숫자에 대한 상태는 아닙니다.이 줄을 실행할 때마다 :

status = odd_even(number) 

상태에 대한 이전 값이 버려집니다.

import random 

even_total = 0 
odd_total = 0 

def main(): 

    print 'Number\tStatus' 
    print'______________' 
    statuses = [] #the status for each random number is added to this list 

    for count in range (10): 
     number = random.randint(1, 10) 
     current_status = odd_even(number) 

     print number, '\t', current_status 

     statuses += [current_status] #add to the list 

    tally_status_count(statuses) #go through the list and total everything up 

#Function to determine odd or even status 
def odd_even(number): 
    if (number % 2) == 0: 
     status = 'Even' 
    else: 
     status = 'Odd' 
    return status 

#Function to tally odd and even counts 
def tally_status_count(statuses): 

    even_total = 0 
    odd_total = 0 

    for status in statuses: 
     if status == 'Even': 
      even_total = even_total + 1 
     else:   
      odd_total = odd_total + 1 


    print 
    print 'The total count of even numbers is: ', even_total 
    print 'The total count of odd numbers is: ', odd_total 

main() 
+0

@ Max-e Hey Max. 도와 주셔서 감사합니다. 코드를 복사하여 붙여 넣기 만하면됩니다. 이제 그것을 무너 뜨리고 그것을 내가 어디에 있었는지 비교하고 그것을 모두 알아 내려고 노력할 것입니다. 나는 논쟁을 통과하는 것의 주위에 내 마음을 얻는 데 어려움을 겪고있다. 안내에 다시 한 번 감사드립니다. – Paul

1
import random 

def main(): 
    even_total = 0 
    odd_total = 0 

    for i in xrange(10): 
     nbr = random.randint(1,10) 
     if nbr % 2 == 0: 
      even_total += 1 
     else: 
      odd_total += 1 

    print 'even total', even_total 
    print 'odd total', odd_total 

if __name__ == "__main__": 
    main() 

이 숙제처럼 들린다. 정확한 요구 사항은 무엇입니까? Tally-er과 odd_even을 분리 된 함수로 분리해야합니까? 당신이하지 않으면 더 쉽습니다. 그들이 받아 들여야 할 논쟁은 무엇입니까? 그들이 무엇을 반환해야합니까?

odd_even 함수에서 문자열을 반환하는 것은 이상합니다. 문자열은 추악합니다. 나는 다음과 같은 함수를 쓸 것이다 :

def is_even(nbr): 
    return nbr % 2 == 0 

대신. tally 함수는 원할 경우 튜플 (even_count, odd_count)을 반환 할 수 있습니다. 아마도 함수와리스트를 인수로 받아 들여야합니다. 그래서 같이

:

import random 

def is_even(nbr): 
    return nbr % 2 == 0 

def tally(func, iterable): 
    yes = 0 
    no = 0 
    for x in iterable: 
     if func(x): 
      yes += 1 
     else: 
      no += 1 
    return (yes, no) 

def main(): 
    even_total, odd_total = tally(is_even, xrange(10)) 

    print 'even total', even_total 
    print 'odd total', odd_total 

if __name__ == "__main__": 
    main() 

그들이 함수의 범위로 제한하고 있기 때문에 당신을 위해 작동하지 않았다 기능에 합계를 이동합니다. 함수가 존재하면 그 함수는 사라집니다. 당신은 그것들을 돌려 주거나 그것을 전역으로 유지해야합니다/더 높은 범위로 그들을 정의하십시오 (여러분은 클래스를 작성할 수도 있습니다).

+0

감사합니다 마크 :

이 아마 가 작성를 의미하는 코드입니다. 숙제입니다. 정확한 요구 사항은 난수 목록을 작성하여 홀수 또는 짝수인지 확인하는 것입니다. 그런 다음 프로그램에 각각의 수를 합산하십시오. – Paul

+0

tallyer와 odd_even 식별자는 별도의 기능을 수행 할 필요가 없습니다. Max E가 옳다고 생각합니다. 문제의 일부는 범위에 대한 문자열을 전달하려고하는 것입니다. 실제로 누적 기가 이것의 쉬운 부분 일지 모르지만 실제로. BTW, 우리는 아직 '수업'에 속하지 않습니다. 의견을 보내 주셔서 감사합니다. – Paul