[Tutor] Counting iterations of a function

Neil Cerutti neilc at norwich.edu
Thu Nov 30 14:42:01 EST 2017

On 2017-11-30, Michael Dowell <michael.dowell297 at gmail.com> wrote:
> Hello, I'm trying to code a magic 8-ball program and it needs
> to include a counter for the number of questions asked. I'm
> having a hard time implementing a count, and need a little
> help. I had tried to implement it in the main() function, but
> that (naturally) led it to only counting '1' for each question,
> for each question asked. Is there a way to count how many times
> a give line of code is executed? For instance, every time the
> oracle() function is run, a counter goes up. Thanks for any
> help.
> Program:
> #import modules
> import random
> import turtle
> #Give welcome message
> def print1():
>     print("Hello!")
>     print("Thank you for using this Magic 8-Ball Simulator.")
>     print("We understand that you have a choice in magic 8-ball
> experiences,\n and that you have no choice in viewing mine.")
>     print("Thank you")
> #Define main function
> def main():
>     #Set local variables
>     count=0          #Tried to intergrate count into main() function
>     query=''
> #Get question
>     query=str(input("Please type in your question(press 'Enter' to exit):"))
>     while query!='':
>         oracle()
>         main()
>         break

You are combining a while loop and a recursive call to main in a
redundant way. A while loop without the complication of the
function calling itself makes things easier. By the way, input
returns a string, so you don't need to call "str" on it.

    query = input("Please type in your question(press 'Enter' to exit):")
    while query!='':
	count += 1
    	query = input("Please type in your question(press 'Enter' to exit):"))

When the while loop is finally complete, count will be the number
of times oracle has run. In current Python, pushing the query
into a separate function is a good way to eliminate the verbatim
repetition of code.

def get_query():
    return input("Please type in your question(press 'Enter' to exit):")

In main:

    query = get_query()
    while query!='':
	count += 1
    	query = get_query()

You can generalize function-call counting by writing a function
decorator that counts the number of times its function has run,
and then decorate oracle with it, but that pie is higher in the
sky than needed here.

Neil Cerutti

More information about the Tutor mailing list