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、文字列を返すことです。文字列をpython2.xで実行できる整数と比較しています(python 3では、この種の比較ではaが発生しますTypeError)が、結果は明らかに常にFalseです。この作品を作るには、おそらく次のようなものが必要ですvar=int(raw_input('Enter the block number'))

ドキュメントから:

異なるタイプのオブジェクトは常に等しくなく比較され、一貫して、しかし任意に順序付けられます。

于 2012-07-18T14:17:51.270 に答える
4

不必要にvarを2回チェックしていて、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

文字列(によって返されるraw_input)が常に整数より大きいという問題が発生しています。

>>> "25" > 100
True

最初に入力を整数に変換する必要があります。

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

tryもちろん、悪い入力に直面しても回復力がありたいので、おそらく全体をブロックにまとめたいと思うでしょう。

于 2012-07-18T14:20:24.483 に答える
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 に答える