[英]Two conditions for nested while loop in Python?
我是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:")
在满足外循环之后,我希望它分析内循环。 如果半径值<= 0,我希望它返回错误消息。 但是,当我运行它时,即使输入值(特别是半径的值<= 0),它也继续进行下一步。 在两个条件都满足之前,我不希望它继续进行下一步。 我怎样才能做到这一点?
非常感谢你! 我很感激!
您对正整数的测试存在缺陷:
int(c_1_r<=0)
这会将<=
运算符的布尔结果转换为整数。 您根本不会将c_1_r
转换为整数,因此您正在将字符串与0
进行比较。 这将始终为false,因为在Python 2中,数字在字符串之前排序:
>>> 'Foobar' <= 0
False
>>> '-10000' <= 0
False
不必对每个变量重复测试,而要使用单独的函数来处理任何这些数字的输入。 在满足所有条件之前,请不要再提供其他号码。 使用无限while
循环带你离开(或者用break 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.