1

下面是一段来自 Python 的代码,它困扰了我一段时间。

var=0
while (var <1 or var>100):
    var=raw_input('Enter the block number ')
    if (var >=1 and var<=100):
        print '\nBlock Number : ',var 
    else:
        print 'ERROR!!! Enter again.'

问题是 while 循环不断迭代而不会中断。谁能帮助我如何打破循环。

有什么方法可以在 Python中实现do..while吗?

4

5 回答 5

12

问题是raw_input返回一个字符串。您正在将字符串与可以在 python 2.x 中执行的整数进行比较(在 python 3 中,这种比较会引发 a TypeError),但结果显然总是False. 要完成这项工作,您可能需要类似的东西var=int(raw_input('Enter the block number'))

文档中:

不同类型的对象总是比较不相等,并且顺序一致但随意。

于 2012-07-18T14:17:51.270 回答
4

您不必要地检查 var 两次,并且您正在尝试比较 int 和 str (因为 raw_input 返回一个字符串),这不起作用。尝试这个:

var=0
while True:
    var=int(raw_input('Enter the block number '))
    if (var >=1 and var<=100):
        print '\nBlock Number : ',var 
        break
    else:
        print 'ERROR!!! Enter again.'
于 2012-07-18T14:18:29.087 回答
1

您应该将字符串转换为 int。

var=0
while (var <1 or var>100):
    # I changed here
    var=int(raw_input('Enter the block number '))
    if (var >=1 and var<=100):
        print '\nBlock Number : ',var 
    else:
        print 'ERROR!!! Enter again.'
于 2012-07-18T14:18:34.123 回答
0

你好你需要输入“break”并且var应该是一个整数,见下文

while True:
var=int(raw_input('Enter the block number '))
if (var >=1 and var<=100):
    print '\nBlock Number : ',var
    break
else:
    print 'ERROR!!! Enter again.'
    continue

希望这可以帮助

于 2012-07-18T14:28:51.913 回答
0

您遇到了一个问题,即字符串(由 返回raw_input)总是大于整数:

>>> "25" > 100
True

您需要先将输入转换为整数:

var = int(raw_input("Enter the block number "))

当然,面对糟糕的输入,您会希望保持弹性,因此您可能希望将整个事情包装在一个try块中。

于 2012-07-18T14:20:24.483 回答