1

ユーザーが2桁の整数を入力し、出力が最初の桁で示される回数を印刷した2番目の桁であるプログラムを作成しようとしています。これが私がこれまでに持っているものです:

number = input('Type two-digit integer \n')
a = int(number)//10
b = int(number)%10
if len(number) != 2:
    print(number, 'is not a two-digit integer')
else:
    print(a*str(b))

これをテストすると、誰かが数字を入力する限り、意図したとおりに動作します。たとえば 6r と入力すると、次のようなエラー メッセージが表示されます。

a = int(数値)//10

ValueError: 基数 10 の int() の無効なリテラル: '6r'

したがって、入力が実際に整数であるかどうかをテストするには、コードの 2 行目に何かを入れる必要があると思いますが、どうすればよいでしょうか? 別の方法で書き直したほうがよいでしょうか?私はPythonの入門コースを取っていることを覚えておいてください。これは私が取っている練習中間試験に関する質問です.多くの複雑なプロセス。

これは、誰かが整数ではないものを入力した場合に機能することを試したものですが、何らかの理由で、整数以外の整数に対して同じメッセージが表示され、意図したとおりに機能しません。

number = input('Type two-digit integer \n')
if (isinstance(number, int)) == False:
    print(number, 'is not a two-digit integer')
elif len(number) != 2:
    print(number, 'is not a two-digit integer')
else:
    a = int(number)//10
    b = int(number)%10
    print(a*str(b))

助けていただければ幸いです。

4

4 に答える 4

4

ここでの最良のオプションは、例外をキャッチすることです。何か問題が発生しました。それはまさに、例外が処理するように設計されているものです。

try:
    ...
except ValueError:
    print("You need to enter an integer!")
    ...

Python には、許可よりも許しを求めるほうがよいというマントラがあるため、事前に機能するかどうかを確認せずに、試してから、機能しない場合は問題を処理してください。

これにより、より信頼性の高いコードが作成され (チェックにより、誤って適切な入力が許可されなかったり、不適切な入力が許可されたりする可能性があります)、コードが読みやすくなります (問題をチェックしてから処理するのではなく、最初に通常のケースに対処してから問題を処理します)。 )。

于 2012-10-16T21:22:04.290 に答える
2

これは、 と に最適な時期tryですexcept

try:
   val = int(number)
except ValueError:
   print("That's not a number...")
于 2012-10-16T21:22:09.300 に答える
1

多分最も簡単なことはすることでしょうnumber.isdigit()isdigit文字列内のすべての文字が数字の場合は true を返します。これは正の整数であることを意味します。したがって、次のようなことができます。

if not number.isdigit():
    print "You didn't enter an integer!"

他の回答が示唆するように try/except を使用すると、負の整数が許可されることに注意してください。これは、おそらくユースケースには意味がありません(文字列を-2回出力することはできません)。

問題は、実際には「2 桁の整数」ではなく、2 つの数字からなる文字列が必要であり、これを 2 つの別個の数値として使用することです。

于 2012-10-16T21:22:08.843 に答える
0

私は次のようなものに行きます:

number = re.match(r'(\d)(\d)', input('Typo two digit number:\n'))
if number is not None:
    print(int(number.group(1)) * number.group(2))
else:
    pass # something wasn't right...
于 2012-10-16T21:30:18.317 に答える