input function inside a nested function in python

Question:

This is strange. I have searched this problem, but I didn’t find any similar question. The following code in Python 3.X is the simplest model that I can explain.

def is_correct(function,wait_sec=0.5):
    while True:
        output = function
        is_correct = input('Is the input correct(y(Enter)/n)?')
        time.sleep(1)
        if is_correct.lower() in ['','y','yes']:
            clear_output()
            time.sleep(wait_sec)
            return output
        clear_output()
        time.sleep(wait_sec)

def whileloop(fun):
    while True:
        fun
def INPUT():
    result=input('...')

def hello_world():
    print('hello world')

def forloop(fun):
    for i in range(3):
        fun

Thus, when I run forloop(INPUT()), it only let me input two times. when I run whileloop(INPUT()), I got one input and then an infinite loop. Most strangely, when I run is_correct(hello_world), it only print ‘hello world’ once.

Any idea?

Asked By: 彭俊文

||

Answers:

You are missing () when using argument fun or function inside functions,
And when you call the functions, you should pass the argument without () like forloop(INPUT) and whileloop(INPUT)

def is_correct(function,wait_sec=0.5):
    while True:
        output = function()
        is_correct = input('Is the input correct(y(Enter)/n)?')
        #time.sleep(1)
        if is_correct.lower() in ['','y','yes']:
            #clear_output()
            #time.sleep(wait_sec)
            return output
        #clear_output()
        #time.sleep(wait_sec)

def whileloop(fun):
    while True:
        fun()
def INPUT():
    result=input('...')

def hello_world():
    print('hello world')

def forloop(fun):
    for i in range(3):
        fun()

forloop(INPUT)
Answered By: charmian
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.