我正在制作一个区域计算器来帮助我理解Python的基础知识,但我想对它进行某种类型的验证 - 如果长度小于零,则再次询问。 我已经设法用形状函数内部的'验证'代码(例如在'square'函数内部)执行此操作,但是当我将验证代码放在一个单独的函数中时 - 'negativeLength',它不起作用。这是我在单独函数中的代码:
def negativeLength(whichOne):
while whichOne < 1:
whichOne = int(input('Please enter a valid length!'))
当我通过调用'negativeLength(Length)'运行它时,它会再次询问我的长度(应该如此),但是当我输入正长度时,条件就会满足,因此实际的循环不会运行。 / p>
我也尝试过(在跟随Emulate a do-while loop in Python?之后)
def negativeLength(whichOne):
while True:
whichOne = int(input('Please enter a valid length!'))
if whichOne < 1:
break
......但这也不起作用。
我把参数设置为'whichOne',因为圆圈的'长度'叫做Radius,所以我把它称为负长度(半径)而不是负长度(长度)的正方形。
那么有什么方法可以在'whichOne = int(输入...)之后完成while循环吗?
编辑:我正在使用Python 3.3.3
答案 0 :(得分:1)
您编写的代码尽可能有效。但是,它实际上并没有做任何有用的事情,因为whichOne
永远不会返回给函数的调用者。注意
def f(x):
x = 2
x = 1
f(x)
print(x)
将打印1,而不是2.您想要执行以下操作:
def negative_length(x):
while x < 0:
x = int(input('That was negative. Please input a non-negative length:'))
return x
x = input('Enter a length:')
x = negative_length(x)
答案 1 :(得分:0)
我假设你正在使用Python 3.如果没有,你需要使用raw_input()而不是input()。
我通常使用的代码如下所示:
def negativeLength():
user_input = raw_input('Please enter a length greater than 1: ')
if int(user_input) > 1:
return user_input
input_chk = False
while not input_chk:
user_input = raw_input('Entry not valid. Please enter a valid length: ')
if int(user_input) > 1:
input_chk = True
return user_input
哪个应该做你想做的事。