Проблема с функцией в Python 2.5 - каким должен быть аргумент; если уместно утверждение «если»; заставить аккумулятор работать - PullRequest
0 голосов
/ 19 февраля 2011

Буду признателен за помощь по этому коду.Я пытаюсь получить функцию для печати результатов.Программа берет случайные числа и определяет, являются ли они четными или нечетными.Это работает.Затем предполагается подсчитать, сколько чисел нечетное, а сколько четных.

Я пытаюсь встроить это в функцию "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()

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

Я вижу несколько проблем с вашим кодом.

Проблема 1: tally_status_count принимает аргумент, который никогда не используется. В этом нет ничего плохого, но это странно, и это означает, что вы, вероятно, не знаете, как делать то, что пытаетесь сделать.

Проблема 2: tally_status_count использует переменную, которая не существует, 'status.' Я предполагаю, что вы, вероятно, намеревались передать статус в качестве аргумента функции. В этом случае определение функции должно выглядеть так:

def tally_status_count(status):

Когда вы решаете проблему 2, вы сталкиваетесь с проблемой 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()
1 голос
/ 19 февраля 2011
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()

Перемещение итогов в функцию не сработало, потому что они ограничены областью действия функции. После того, как функция существует, они перестают существовать. Вы должны вернуть их или оставить их как глобальные / определить их в более широком контексте (вы также можете написать класс).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...