Python 在for循环之后如何打印平均值?

Python 在for循环之后如何打印平均值?,python,python-3.x,Python,Python 3.x,我是Python新手,我正在制作一个程序,在这个程序中,计算机在一定范围内生成一个随机数,然后尝试猜测它选择的数字。我使用for循环使计算机猜测多个数字(在本例中为2)。我还跟踪循环每次迭代后的猜测次数。之后,我将在循环完成后对这些猜测取平均值。然而,当我试图得到平均值时,它不会打印出来。我不知道代码出了什么问题。有人能帮我解决这个问题吗 import random def guess(): the_num = random.randint(1, 100) pr

我是Python新手,我正在制作一个程序,在这个程序中,计算机在一定范围内生成一个随机数,然后尝试猜测它选择的数字。我使用for循环使计算机猜测多个数字(在本例中为2)。我还跟踪循环每次迭代后的猜测次数。之后,我将在循环完成后对这些猜测取平均值。然而,当我试图得到平均值时,它不会打印出来。我不知道代码出了什么问题。有人能帮我解决这个问题吗

import random

def guess():
        the_num = random.randint(1, 100)
        print('The number to guess is',the_num)
        comp_guess = random.randint(1, 100)
        print('The computer guesses ', comp_guess)
        tries = 1

        while comp_guess != the_num:
            print('The computer guesses ', comp_guess)
            tries += 1
            if comp_guess == the_num:
                break
            else:
                comp_guess = random.randint(1, 100)

        for i in range(2):
            guess()

        print('The computer took',tries,'guesses')
        print('The computer guessed it right!')
        print('The computer guessed',(tries/2),'times on average') 
        # Trying to calculate the average number of guesses after the loop is finished

通过在其内部调用guess,您正在创建一个没有基本情况的递归函数,因此它永远不会结束。更好的方法是在实际代码中进行循环。在下面的代码中,我还通过允许函数根据输入进行任意次数的调用,使函数变得灵活

import random

def guess(num_loops):
    total_tries = 0
    for i in range(num_loops):
        the_num = random.randint(1, 100)
        print('The number to guess is',the_num)
        comp_guess = random.randint(1, 100)
        print('The computer guesses ', comp_guess)
        tries = 1

        while comp_guess != the_num:
           # print('The computer guesses ', comp_guess)
            tries += 1
            print(tries)
            if comp_guess == the_num:
                break
            else:
                comp_guess = random.randint(1, 100)
        total_tries += tries
        print('The computer took',tries,'guesses')
        print('The computer guessed it right!')
    print('The computer guessed',(total_tries/num_loops),'times on average') 
    # Trying to calculate the average number of guesses after the loop is finished

guess(2)

这里的递归是函数调用自身时的递归

在您的例子中,您不需要递归,只需要一个函数和调用它的代码

你的职能应该做一件事,并做好它。在这种情况下,您的功能是让计算机猜测它生成的数字

def guess():
    the_num = random.randint(1, 100)
    print('The number to guess is',the_num)
    comp_guess = random.randint(1, 100)
    print('The computer guesses ', comp_guess)
    tries = 1

    while comp_guess != the_num:
        print('The computer guesses ', comp_guess)
        tries += 1
        if comp_guess == the_num:
            break
        else:
            comp_guess = random.randint(1, 100)
现在,您似乎希望此代码运行两次。因此,计算机猜测多个数字,并对其试图猜测的每个数字进行多次尝试

在这种情况下,您只需要在函数外部多次调用该函数

for i in range(2):
    guess()
此代码没有缩进,也不是函数的一部分

要了解有关函数的更多信息,请转到Python文档:

我还将链接到我极力推荐的一本书:

这些资源将帮助您了解有关函数的更多信息


希望这个答案对你有帮助!如果您还有任何问题,请在下面发表评论

您不需要或不希望
guess()
函数那样调用自己,因为它当前的编码方式永远不会返回

以下是我将如何重新组织您的代码以避免这样做:

import random

NUM_GUESSES = 2

def guess():
    the_num = random.randint(1, 100)
    print('The number to guess is', the_num)

    tries = 0
    comp_guess = None
    while comp_guess != the_num:
        comp_guess = random.randint(1, 100)
        print('The computer guesses', comp_guess)
        tries += 1

    return tries

total_tries = 0
for i in range(NUM_GUESSES):
    tries = guess()
    total_tries += tries
    print('The computer took', tries, 'guesses')
    print('The computer guessed it right!')

average = total_tries / NUM_GUESSES
print('The computer guessed', average, 'times on average')
样本输出:

要猜的数字是88
计算机猜测是58
计算机猜19
电脑猜55
计算机猜16
计算机猜测是85
计算机猜测24
计算机猜76
计算机猜36
计算机猜18
计算机猜测是58
计算机猜27
计算机猜测1
计算机猜2
计算机猜100
计算机猜测是74
计算机猜49
计算机猜26
计算机猜76
计算机猜测28
计算机猜测38
计算机猜27
计算机猜100
计算机猜7
计算机猜50
计算机猜测是54
计算机猜测80
计算机猜36
计算机猜39
计算机猜61
计算机猜测28
计算机猜11
计算机猜测38
计算机猜27
计算机猜29
计算机猜测70
计算机猜测45
计算机猜18
电脑猜65
计算机猜测40
计算机猜测88
计算机进行了40次猜测
电脑猜对了!
要猜的数字是99
计算机猜73
计算机猜99
计算机进行了两次猜测
电脑猜对了!
计算机平均猜测了21.0次

是否在没有基本大小写的函数中调用
guess()
,或者这是缩进错误?当我运行你的代码时,我得到一个最大递归错误。首先,调用你的函数(即
guess()
),因为你只定义了它。第二,删除范围(2)中的i的
:guess()
,否则它将永远运行。@0TT0当我运行它时,它就可以了。我真的不知道你说的是什么错误。是的,我确实在函数中调用了guess()。@ryugie谢谢你的建议,我以后会记住的。谢谢你的帮助!我对现在需要解决的问题有了更好的理解。