0

ユーザーからの入力を求めるプログラムを書いています。

入力が数字(単語や句読点ではありません...)であるかどうか、およびタプル内のオブジェクトを示す数字であるかどうかをpythonに確認してもらいたいです。3 つの条件のいずれかが False になった場合、ユーザーにその変数に別の値を指定してもらいたいと思います。これが私のコードです

colour={'yello':1, 'blue':2, 'red':3, 'black': 4, 'white': 5, 'green': 6}
height_measurements=('centimeter:1', 'inch:2', 'meter:3', 'foot:4')
weight_measurements=('gram:1', 'kilogram:2', 'pounds:3')
print height_measurements
hm_choice = raw_input('choose your height measurement').lower()
while not hm_choice.isdigit() or hm_choice > 0 or hm_choice < len(height_measurements) :
    hm_choice = raw_input('choose your height measurement').lower()        
print weight_measurements
wm_choice = raw_input('choose your weight measurement').lower()
while not wm_choice.isdigit() or wm_choice > 0 or wm_choce < len(weight_measurements) :
    wm_choice = raw_input('choose your weight measurement').lower()

これをテストすると、何を入力しても常に height_measurement の入力を挿入するようになりました

コードを確認して修正してください。また、よろしければ、あなたのより良いコードを教えてください。

4

2 に答える 2

6

あなたのコードを完全に修正するわけではありませんが、あなたが混乱していると思われることについて説明します。

raw_input文字列を返します。文字列と整数は 2 つの型であり、互いに比較することはできません (ただし、Python 2 ではこれは を発生させません) TypeError。したがって、変数は文字列であり、メソッドを使用して整数であることを確認するhm_choiceのは正しいです。isdigitただし、文字列を整数と比較すると、これらの条件のいずれかで常に True と評価されます。つまり、while ループが停止することはありません。そこで私はあなたにこの質問を投げかけます:どうやって文字列から整数を取得しますか?

次に、そのループのロジックを調べる必要があります。あなたはこう言っています: whilehm_choiceは数字ではありません OR whilehm_choiceは 0 より大きい (無効なステートメントであることは既にわかっています) OR whilehm_choiceは 4 (またはタプルの長さ) 未満です。

したがって、それらのいずれかが True の場合、ループは終了しません。上でリンクした記事を読めば、どれが常に True と評価されるかがわかります。;)

于 2013-01-07T18:11:47.493 に答える
0

これをテストすると、何を入力しても、height_measurementの入力が常に挿入されていました。

これはhm_choice > 0、stringとintの比較であり、これは未定義であり、実装に応じて等しくなる可能性がTrueあるためです。False

3番目の条件の意味がよくわからなかったので、THE_OTHER_CONDITION代わりにそこに配置しました。THE_OTHER_CONDITION = Trueコードを定義すると機能します。

colour={'yello':1, 'blue':2, 'red':3, 'black': 4, 'white': 5, 'green': 6}
height_measurements=('centimeter:1', 'inch:2', 'meter:3', 'foot:4')
weight_measurements=('gram:1', 'kilogram:2', 'pounds:3')

print height_measurements
while True:
    hm_choice = raw_input('choose your height measurement: ').lower()
    if (hm_choice.isdigit() and int(hm_choice) > 0 and THE_OTHER_CONDITION):
        break

print weight_measurements
while True:
    wm_choice = raw_input('choose your weight measurement: ').lower()
    if (wm_choice.isdigit() and int(hm_choice > 0) and THE_OTHER_CONDITION):
        break
于 2013-01-07T18:37:49.917 に答える