【问题标题】:How do I print the average value after the for loop?如何在 for 循环后打印平均值?
【发布时间】:2017-10-31 23:39:04
【问题描述】:

我是 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(),没有基本情况,还是缩进错误?当我运行你的代码时,我得到一个最大递归错误
  • 首先,调用你的函数(即guess()),因为你只是定义了它。其次,删除for i in range(2): guess(),否则它将永远运行。
  • @0TTT0 当我运行它时,它很好。我其实不知道你在说什么错误。是的,我确实在我的函数中调用了guess()。
  • @ryugie 谢谢你的建议,我以后会记住的。

标签: python python-3.x


【解决方案1】:

您不需要或不希望 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')

样本输出:

The number to guess is 88
The computer guesses 58
The computer guesses 19
The computer guesses 55
The computer guesses 16
The computer guesses 85
The computer guesses 24
The computer guesses 76
The computer guesses 36
The computer guesses 18
The computer guesses 58
The computer guesses 27
The computer guesses 1
The computer guesses 2
The computer guesses 100
The computer guesses 74
The computer guesses 49
The computer guesses 26
The computer guesses 76
The computer guesses 28
The computer guesses 38
The computer guesses 27
The computer guesses 100
The computer guesses 7
The computer guesses 50
The computer guesses 54
The computer guesses 80
The computer guesses 36
The computer guesses 39
The computer guesses 61
The computer guesses 28
The computer guesses 11
The computer guesses 38
The computer guesses 27
The computer guesses 29
The computer guesses 70
The computer guesses 45
The computer guesses 18
The computer guesses 65
The computer guesses 40
The computer guesses 88
The computer took 40 guesses
The computer guessed it right!
The number to guess is 99
The computer guesses 73
The computer guesses 99
The computer took 2 guesses
The computer guessed it right!
The computer guessed 21.0 times on average

【讨论】:

  • 感谢您的帮助!我对我现在需要解决的问题有了更好的了解。
【解决方案2】:

通过在其自身内部调用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)

【讨论】:

    【解决方案3】:

    你所拥有的是递归,即函数调用自身的时候。

    在您的情况下,您不需要递归,只需要一个函数和调用它的代码。

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

    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 文档:https://docs.python.org/3/tutorial/controlflow.html#defining-functions

    我还会链接到我强烈推荐的一本书:http://inventwithpython.com/chapter6.html

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多