我正在尝试创建一个接收用户输入的函数,重新提示直到输入一个字符。 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吗?
答案 0 :(得分: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
。
我对递归很困惑,因为你的问题中使用了缩进。
答案 1 :(得分:1)
变化:
inputSomething(input('Enter str: '))
要:
inputSomething(lambda : input('Enter str: '))
和
value = (prompt)
要:
value = prompt()
这样你传递一个函数然后调用它,而不是传递一个被调用函数的结果。
答案 2 :(得分:0)
为了将来参考,还包括重试的另一种方式:
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')