【问题标题】:Python - Passing input (prompt) into FunctionPython - 将输入(提示)传递给函数
【发布时间】:2026-02-01 17:10:02
【问题描述】:

我正在尝试创建一个接收用户输入的函数,它会重新提示直到输入一个字符。 Strip() 用于删除空格,因此只计算字符。

这是我当前的代码:

def inputSomething(prompt, errorMessage = 'Atleast one character must be used'):
while True:
   value = (prompt)
   Response = value.strip()
   if len(Response) >=1:
      print ('Valid')           

   else:
      print(errorMessage)
      continue

inputSomething(input('Enter str: '))

我遇到的问题是循环。现在它无限循环结果。我不应该使用 if else 吗?

【问题讨论】:

  • 能否更正您的缩进!

标签: python input prompt


【解决方案1】:

问题是input 在循环之外:

import sys

def inputSomething(prompt, errorMessage = 'Atleast one character must be used'):
        while True:
            value = input(prompt)
            Response = value.strip()
            if Response:
                print ('Valid')           
                return Response   
            else:
                print(errorMessage, file=sys.stderr)


something = inputSomething('Enter str: ')

请注意,空字符串等于False

由于您的问题中使用了缩进,我对递归感到困惑。

【讨论】:

  • 谢谢!这确实有效,但是当输入不正确时,errorMessage 会重复。我希望它循环并重新提示用户。
  • 你不觉得使用递归与否,你需要在循环的inside输入吗?
  • 已编辑答案,见上文
【解决方案2】:

变化:

inputSomething(input('Enter str: '))

收件人:

inputSomething(lambda : input('Enter str: '))

还有:

value = (prompt)

收件人:

value = prompt()

这样你传递一个函数然后调用它,而不是传递被调用函数的结果。

【讨论】:

    【解决方案3】:

    为了将来的参考,另一种方式也包括重试:

    import sys
    
    def inputSomething(prompt, retries = 2, errorMessage = 'Atleast one character must be used'):
        while retries > 0:
            value = input("Enter str: ")
            Response = value.strip()
            if Response:
                print ('Valid')
                retries -= 1
                continue
                #return Response
            else:
                print(errorMessage, file=sys.stderr)
                retries -= 1
    
    inputSomething('prompt')
    

    【讨论】: