Python中嵌套while循环的两个条件?

时间:2017-02-16 07:38:38

标签: python nested-loops

我是Python的新手,我即将开始的实验室要求我编写一个代码,用于对平面上的对象(圆圈)进行碰撞测试。对于两个圆圈,我提示用户输入x和y坐标的值,以及两者的半径。目前我设置它,以便如果用户忽略为三个输入中的任何一个输入值,它将使用while循环返回错误消息。这很好。

但是,我也想设置它以使半径不能小于或等于零。我使用了嵌套的while循环。这是我的代码:

while c_1_x=="" or c_1_y=="" or c_1_r=="":
    print "Error: please enter a value for each field. If the value is 0, type 0."
    c_1_x=raw_input("Enter the x coordinate of CIRCLE ONE center:")
    c_1_y=raw_input("Enter the y coordinate of CIRCLE ONE center:")
    c_1_r=raw_input("Enter the radius of CIRCLE ONE:")
    while int(c_1_r<=0):
        print "Error: radius of circle must be greater than zero."
        c_1_r=raw_input("Enter the radius of CIRCLE ONE:")

在满足外部循环后,我希望它分析内部循环。如果radius的值是&lt; = 0,我希望它返回一条错误消息。但是,当我运行它时,它甚至在输入值之后继续下一步(特别是半径值<= 0)。我不希望它继续下一步,直到满足BOTH标准。我怎么能这样做?

非常感谢!我很感激!

1 个答案:

答案 0 :(得分:2)

您对正整数的测试存在缺陷:

int(c_1_r<=0)

这会将<=运算符的布尔结果转换为整数。您永远不会将c_1_r转换为整数,因此您要将字符串与0进行比较。这将始终为假,因为在Python 2中,数字在字符串之前排序:

>>> 'Foobar' <= 0
False
>>> '-10000' <= 0
False

不是对每个变量重复测试,而是使用单独的函数来处理任何这些数字的输入。在满足所有条件之前,不要求另一个号码。当输入满足您的条件时,使用您突破的无限while循环(使用break或使用函数中的return):

def ask_for_positive_number(prompt):
    while True:
        try:
            number = int(raw_input(prompt))
        except ValueError:
            print('Please enter a valid positive integer')
            continue
        if number <= 0:
            print('Please enter a valid positive integer')
            continue
        return number

c_1_x = ask_for_positive_number("Enter the x coordinate of CIRCLE ONE center:")
c_1_y = ask_for_positive_number("Enter the y coordinate of CIRCLE ONE center:")
c_1_r = ask_for_positive_number("Enter the radius of CIRCLE ONE:")

由于函数只会在输入正整数时返回,因此无需测试是否所有3个变量都分配了值。

演示功能:

>>> ask_for_positive_number('Y0!: ')
Y0!: -1
Please enter a valid positive integer
Y0!: foobar
Please enter a valid positive integer
Y0!: 42
42