Python 2.5中的函数问题 - 参数应该是什么;如果“if”陈述合适;使累加器工作

时间:2011-02-19 03:35:08

标签: python function accumulator

感谢您对此代码的帮助。我正在尝试使用函数来打印结果。该程序采用随机数并确定它们是偶数还是奇数。这样可行。然后应该给出一个数字奇数和多少数是偶数的统计数。

我正在尝试将其构建到“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 个答案:

答案 0 :(得分: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()

这听起来像是家庭作业。具体要求是什么?你需要将计数器和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()

将总计移动到函数中并不适合您,因为它们仅限于函数的范围。函数存在后,它们就不复存在了。你必须返回它们,或者将它们保存为全局变量/在更高的范围内定义它们(你也可以编写一个类)。

答案 1 :(得分:1)

我发现您的代码存在一些问题。

问题1:tally_status_count接受一个从未使用过的参数。这没什么不对,但这很奇怪,这意味着你可能不确定如何做你想做的事。

问题2:tally_status_count使用一个不存在的变量“status”。我猜你可能希望将状态作为参数传递给函数。在这种情况下,函数定义应如下所示:

def tally_status_count(status):

当您修复问题2时,您最终遇到问题3,即......

问题3:格式错误的for循环。这样:

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()