0

このコードについて助けていただければ幸いです。結果を出力する関数を取得しようとしています。プログラムは乱数を取り、それらが偶数か奇数かを判断します。それはうまくいきます。次に、奇数と偶数の数を集計することになっています。

それを「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()
4

2 に答える 2

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

合計は関数のスコープに制限されているため、関数への合計の移動は機能しませんでした。関数が存在すると、それらは存在しなくなります。それらを返すか、グローバルとして保持するか、より高いスコープで定義する必要があります(クラスを作成することもできます)。

于 2011-02-19T03:53:20.260 に答える
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)

status の古い値は破棄されます。

これはおそらくあなたが書くつもりだったコードです:

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()
于 2011-02-19T04:09:23.273 に答える