==
あなたは方法と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
ます。