web-dev-qa-db-ja.com

文字列内の文字が英数字であるかどうかを確認する

文字列内の文字が英数字であるかどうかを確認したい。そのために次のコードを作成しましたが、うまく機能しています。

s = input()

temp = any(i.isalnum() for i in s)
print(temp)

私が持っている質問は以下のコードです、上記のコードとどう違うのですか:

for i in s:
    if any(i.isalnum()):
        print(True)

Forループの反復はまだ最初のコードで行われているのに、なぜエラーをスローしないのですか? 2番目のコードは以下をスローします。

トレースバック(最後の最後の呼び出し):TypeErrorのファイル ""、18行目: 'bool'オブジェクトは反復不可

7
rachitmishra25

2番目の関数では、anyをリスト全体ではなく単一の要素に適用します。したがって、文字iが英数字の場合、単一のブール要素を取得します。

2番目のケースでは、単一要素を操作するときにanyを実際に使用することはできません。代わりに次のように書くことができます:

for i in s:
    if i.isalnum():
        print(True)
        break

これは、最初のケースにより似ています。

5
JohanL

any()は反復可能を期待しています。これで十分です:

isalnum = False
for i in s:
    if i.isalnum():
        isalnum = True
        break
print(isalnum)
1
Stephen Rauch