0

Python コードの条件に問題があります。これは数学アプリケーションであり、コードの一部がうまく機能していません。

def askNumber():
    """Asks the number to test"""
    a=raw_input("Select the number to test (type 'exit' for leaving):")
    if len(a)!=0 and a.lower!="exit":
        try:
            b= int(a)
            processing(b)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            time.sleep(1)
            askNumber()
    elif len(a)!=0 and a.lower=="exit":
        answer()
    else:
        print "Your input can't be 'empty'"
        time.sleep(1)
        askNumber()

そのため、「a」の raw_input で「exit」と入力すると、適用されるはずの条件はelif条件ですが、 if条件が適用されてしまい、「Your input is not valid. Please enter a 'number'!」と出力されます。 " 申し訳ありませんが、明らかなことであれば、何度か間違いを見つけようとしましたが、私は初心者です。

4

3 に答える 3

7

関数を呼び出す必要があります.lower()

if len(a) != 0 and a.lower() != "exit":
    # ...
elif len(a) != 0 and a.lower() == "exit":

をテストする必要はありませんlen(a)!=0。単純にaそれ自体をテストします。

if a and a.lower() != "exit":
    # ...
elif a and a.lower() == "exit":

空の文字列Falseは、ブール コンテキストで評価されます。

于 2013-03-21T11:53:05.213 に答える
3

あなたのプログラム フローは少し裏返しになっています。改善点を提案できますか?

def askNumber():
    """Asks the number to test"""

    while True:
        a = raw_input("Select the number to test (type 'exit' for leaving):")

        if not a:
            print "Your input can't be 'empty'"
            continue

        if a.lower() == "exit":
            answer()
            break

        try:
            b = int(a)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            continue

        processing(b)

実際には、not aブランチも削除できます (空の入力は で処理されますexcept)。

于 2013-03-21T11:58:57.017 に答える
1

次の条件を変更できます。

   if a and a.lower() !="exit":
  # .....
   elif a and a.lower() == "exit":
      answer()
   elif a and not a.isdigit(): print "invalid input"
   else:
   #.............

は必要ないことに注意してください。len(a) != 0使用するだけで、a空かどうかが評価されます。

于 2013-03-21T12:51:42.183 に答える