在条件满足后运行while while循环一次

时间:2014-04-16 15:49:13

标签: python loops python-3.x while-loop

我正在制作一个区域计算器来帮助我理解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

2 个答案:

答案 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

哪个应该做你想做的事。