2

入力された文字列がアルファベット順(abcdearian)であるかどうかをチェックするプログラムをPythonで作成しようとしています。プログラムは、文字以外の文字を無視し、大文字を小文字として扱う必要があります。たとえば...abCdeはabcdearianで、eff!ortはabcdearianです。現在、プログラムは文字以外の文字を無視しませんが、大文字を小文字として扱います。ただし、変換された入力ではなく、元の入力をプログラムに出力させたいのです。したがって、abCdeは、印刷時にabCde(abcdeではなく)として表示されるはずです。助けてくれてありがとう!

def isabcde(s):
    for i in range(len(s) - 1):
        if s[i] > s[i+1]:
            return print(s, "is not abcdearian")
    return print(s,  "is abcdearian")


while True:
    try:
        s = input("The string? ").lower()
    except EOFError:
        break
    except TypeError:
        break
    isabcde(s)
4

3 に答える 3

3

私はこれを試してみます:

def isabcde(s):
    filtered = [i for i in s.lower() if i in 'abcdefghijklmnopqrstuvxyz']
    for i in range(len(filtered) - 1):
        if filtered[i] > filtered[i+1]:
            return print(s, "is not abcdearian")
    return print(s,  "is abcdearian")

while True:
    try:
        s = input("The string? ")
    except EOFError:
        break
    except TypeError:
        break
    isabcde(s)

そして、あなたが野心的であるならば、あなたは取り替えることを試みるかもしれません:

    for i in range(len(filtered) - 1):
        if filtered[i] > filtered[i+1]:

と:

    if all([i[0] < i[1] for i in zip(filtered,filtered[1:]) :
于 2012-11-26T01:16:27.670 に答える
1

関数の外部で呼び出す代わりにstring.lower()、次のように内部で呼び出すことができます。

def isabcde(s):
    original = s
    s = s.lower()
    for i in range(len(s) - 1):
        if s[i] > s[i+1]:
            print(original, "is not abcdearian")
            return
    print(original,  "is abcdearian")

while True:
    try:
        s = input("The string? ")
    except EOFError:
        break
    except TypeError:
        break
    isabcde(s)
于 2012-11-26T01:16:19.360 に答える
0

別の方法は次のとおりです。

def is_abcdearian(s):
    import re
    s = s.lower()
    s = re.sub('[^a-z]', '', s)
    return s == ''.join(sorted(s))
于 2012-11-26T01:28:53.350 に答える