==あなたは方法とor働きを誤解しています。すべての文字を個別にテストする必要があります。
if s[i] == 1 or s[i] == 2 or s[i] == 3 ...:
またはinテストを使用します。
if s[i] in (1, 2, 3, 4, ...):
ただし、ここでは整数ではなく文字をテストしているため、文字を整数に変換するか、数字に対してテストします。
if int(s[i]) in (1, 2, 3, 4, ...):
また
if s[i] in '1234567890':
文字列もシーケンスであるため、後者は機能します。文字列に 1 文字が含まれているかどうかをテストする'1234567890'ことも、有効なメンバーシップ テストです。
文字列はシーケンスなので、直接ループすることもできます:
for char in s:
if char in '1234567890':
whileそこにループとカウンターを使用する必要はありません。
これはまだ数字のみをテストします。同様に文字をテストするには、次の 2 つのいずれかを行うことができます。
stringモジュールを使用してください。次の属性がascii_lettersあります。digits
import string
for char in s:
if char in string.ascii_letters + string.digits:
または、文字が 2 つの既知の文字の間にあるかどうかをテストします。
if 'a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9':
文字列は比較可能でソート可能であるため、これは機能します。ASCII コード テーブル内の位置に応じて、サイズが大きくなったり小さくなったりします。
次の問題は、帰りTrueが早すぎることです。これは最初の一致に対して行いますが、すべての文字をテストする必要があります。Trueミスが見つからなかった場合にのみ戻ります。
for char in s:
if char not in string.ascii_letters + string.digits:
return False
return True
ここで、すべての文字をテストし、False英数字以外の最初の文字を返しますが、ループが完了したときにのみ を返しTrueます。