1

私のコードは次のとおりです。

varA = 5
varB = 'dog'
if type(varB) == 'string':
    print("string involved")
elif type(varA) == 'string':
    print("string involved")
else:
    if varA > varB:
        print("bigger")
    elif varA == varB:
        print("equal")
    elif varA < varB:
        print("smaller")

8行目でエラーが発生します。if(line3)またはelif(line5)の要件をすでに満たしている場合、コードが7行目のelseステートメントで反応しないようにします。

また、'または'メソッドを使用して、if(line3)ステートメントとelif(line5)ステートメントを結合する方法はありますか?

4

2 に答える 2

4

を使用isinstanceして確認してくださいtype

varA = 5
varB = 'dog'
if isinstance(varA, str) or isinstance(varB, str):
    print("string involved")
else:
    if varA > varB:
        print("bigger")
    elif varA == varB:
        print("equal")
    else:
        print("smaller")

ここでは、変数がタイプであるかどうかを確認しています。変数のいずれかがタイプである場合は、文字列が含まれているため、コードstrは実行されません。else

これorは、例のように、基本的に2つの条件を1つの行に結合することによって実行できます。ここでは大きな問題ではありません。orステートメントをシミュレートする別の方法は、を使用することanyです。これは、条件のいずれかが存在するかどうかをチェックし、存在Trueする場合は実行します。

if any((isinstance(varA, str), isinstance(varB, str))):
    # Code...

orこれは、データ構造が大きく、同様の比較を行う必要がある場合に便利です。and同等のものはall、です。これは同じ構文で、:allの代わりに使用します。any

if all((isinstance(varA, str), isinstance(varB, str))):
    # This code will evaluate if all values are strings

また、チェックがたくさんあり、入力にうんざりしている場合は、またはと組み合わせてisinstance使用​​することで、その部分をもう少しバンドルできます。generatoranyall

if any(isinstance(x, str) for x in (varA, varB)):
    # Code
于 2012-12-14T05:58:11.917 に答える
0

何が起こっているのかというとtype()、文字列ではなく型オブジェクトが返されるためtype(varB) = <type 'str'>、実際の文字列と比較しているのですがstring、それらは同じではありません。

次に5、文字列を比較します。これは、それらを比較する方法がないため、エラーをスローします。

このSOの質問では、タイプをチェックするためのさまざまな方法について詳しく説明しています。

于 2012-12-14T05:57:30.553 に答える