1

メソッドやインポートを使用せずに、入力が英数字 (文字または数字のみを含む) である場合にのみ、関数が True を返すようにする良い方法は何でしょうか?

これまでのクラスではbools、 、whileループ、および -ステートメントのみを取り上げ、if学んだことのみを使用することが許可されています。

これは私が得たものです

def alphanumeric(s):
    i = 0
    while i < len(s):
        if s[i] == 1 or s[i] == 2 or s[i] == 3.....:
            i = i + 1
            return True
        else:
            return False

メソッドやインポートを使用せずにこれを行うより簡潔な方法はありますか? 私が持っているものは機能せず、何を入力しても False を返します。

解決しました。助けてくれたすべての人に感謝します!

4

7 に答える 7

3

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

于 2013-06-07T23:29:54.900 に答える
1

「メソッドが許可されていない」とは、正規表現などがないことを意味すると仮定すると、これを使用できます。

string.digits必要に応じて手動で書き出すのはあなたに任せますascii_letters;) (それは冗談でした。許可されていない場合は、@ mipadi のメソッドを実際に使用できますimport string)

from string import digits, ascii_letters as alphabet
valid = digits + alphabet
def alphanumeric(s):
    return all(c in valid for c in s)


>>> alphanumeric('1a')
True
>>> alphanumeric('_')
False

に相当:

def alphanumeric(s):
    for c in s:
        if c not in valid:
            return False
    else:
        return True
于 2013-06-07T23:29:29.390 に答える
0

いくつかの提案:

まず、英数字が表示されたときに True を返そうとしています。True を返す前にすべての文字を確認する必要があります (ただし、英数字以外の文字が 1 つ表示されたときに False を返すことはできます)。

次に、s が文字列の場合、s[i] は文字 (つまり、1 ではなく '1') です。

第三に、あなたが書いたとき

if s[i] == 1 or 2 or 3

(s[i] == 1) を評価し、次に 2 をブール値 (常に false) として評価するなどです。s[i] をそれぞれと比較するには、

if s[i] == '1' or s[i] == '2' or s[i] == '3'

または、より簡潔に言うと、

if s[i] in ['1', '2', '3', ...]
于 2013-06-07T23:44:35.990 に答える
0
def isAlphaNumeric(myString):
    return not any((c for c in myString if not c in "abcdef...ABC...123"))
于 2013-06-07T23:46:23.113 に答える