0

ユーザーが基数 10 の数値を入力して、別の (または同じ) 基数の数値に変換するプログラムを作成しています。

def convert(a,b)

ここで、a は入力、b は新しいベースです。b が整数でない場合、b が値を想定していない場合 (つまり、空白)、または b が 1 未満の整数である場合、プログラムは値 "-1" を返すように指示されています。

数値を変換する方法と、b が 1 未満の場合にプログラムに -1 を返す方法はわかっていますが、b が空または整数でない場合にプログラムに -1 を返すようにするにはどうすればよいですか?

4

4 に答える 4

14

簡単な答え: しないでください。

型チェックは Pythonic ではありません。やりたいことをやってみて、うまくいけばうまくいき、うまくいかなければ例外をスローします。

同様に、-1失敗時に戻ることはあまり Pythonic ではありません。通常、失敗時に例外をスローする必要があります。これが理にかなっている (まれな) 場合もありますが、一般的には、(必要に応じて例外をキャッチするだけでなく) 値をチェックする必要があり、バグを見つけるのが難しくなります (値は-1、例外)。

長い答え: 本当に必要な場合は、 を使用isinstance(value, int)して値が整数かどうかを確認できますが、これは Python のダックタイピングを損なうため、99.9% の確率で悪い考えです。また、必ずしも期待どおりに機能するとは限りません。たとえば、boolは のサブクラスでintあるため、isinstance(True, int)返さTrueれます。

于 2012-05-21T21:26:33.520 に答える
1

これは、b の値を確認できる 1 つの方法です。

def convert(a, b=None):
    if isinstance(b, int) and b > 1:
        return do_convert(a, b)
    return -1
于 2012-05-21T21:30:41.450 に答える
0

宿題のように見えます。あなたの先生はあなたに良いプログラミングの練習を教えていません。

Pythonプログラマーは通常、値をそのまま取得します。可能であれば、組み込みのPython関数が変数を必要なタイプに変換します。不可能な場合は、呼び出し元の関数が何らかのアクションを実行する必要があります。これはダックタイピングと呼ばれます。入力が将来問題を引き起こす可能性があることがわかっている場合は、不正な入力を防ぐためにいくつかのassertステートメントを追加できます。

isinstance()関数を使用して、変数が整数であるかどうかを確認できます。変数がtrueであるかどうかを確認することで、空であるかどうかを確認できます。

これが宿題ではなかった場合、ベースを変換する最良の方法は、組み込みint(a, b)関数を使用することです。

于 2012-05-22T03:08:22.440 に答える
0

私の提案は、あなたが持っているものは何でも取り、それをint. これはより Pythonic です。厳密に言えば type でなくても、整数のように機能するものなら何でも取りますint。同時に、intコードを書いているときだけ心配する必要があることを保証します。

def convert(n):
    try:
       n = int(n)
    except ValueError, TypeError:
       return -1
    # here, do the conversion and return the result
于 2012-05-21T22:06:09.720 に答える