1

文字列入力を受け取り、すべての単語の最初の文字をすべて大文字にして文字列を返す関数を作成しています。これをある程度達成しました。

私のコード:

string = input("Please Enter A string:")

def capitalize_words(string):
    split = string.split()

    letter1 = ''
    letter2 = ''
    letter3 = ''

    str1 = split[0]
    str2 = split[1]
    str3 = split[2]

    for i in str1:
        if i in str1[0]:
            first = i.upper()
        else:
            letter1 = letter1 + i
            string1 = (first+letter1)

    for i in str2:
        if i in str2[0]:
            first = i.upper()
        else:
            letter2 = letter2 + i
            string2 = (first+letter2)

    for i in str3:
        if i in str3[0]:
            first = i.upper()
        else:
            letter3 = letter3 + i
            string3 = (first+letter3)

    result = string1+' '+string2+' '+string3
    return result


func = capitalize_words(string)
print(func)

入力:

Please Enter A string:herp derp sherp

出力:

Herp Derp Sherp

ただし、スペースを含む 3 つの単語しか入力できないため、これは非常に柔軟性がありません。これはかなり原始的なプログラムになります。何語でも入力できるようにして、入力する単語数に関係なく、すべての単語の最初の文字が大文字になるという望ましい結果を得たいと思います。

私のスキルでは、これが私のできる限りのことではないかと心配しています。可能であれば、私のプログラムを改善していただけませんか。

4

4 に答える 4

6
>>> print(raw_input('Please Enter A string: ').title())
Please Enter A string: herp derp sherp
Herp Derp Sherp
于 2013-05-15T09:46:14.607 に答える
3

str.title()あなたが一度にやりたいことを達成するために使用してください。

ただし、文中の単語を処理するには、一連のローカル変数の代わりにループを使用します。これは、任意の数の単語に対して行っていることと同じことを行うバージョンです。

for i, word in enumerate(split):
    split[i] = word[0].upper() + word[1:]

result = ' '.join(split)

文字列のスライスも使用して、単語の最初の文字だけを選択し、最初の文字以外はすべて選択しました。を使用して、リスト内の単語を直接enumerate()置き換えることができるカウンターを提供することに注意してください。split

于 2013-05-15T09:47:28.633 に答える
1

これを 1 行のジェネレーター式で記述できます。

def upper_case(text):
    return ' '.join(w[0].upper() + w[1:] for w in text.split())

この関数は 1 文字の単語では失敗し、空白を 1 文字のスペース文字に置き換えることに注意してください。

これを次のように使用します

In [1]: upper_case(input('Please Enter A string: '))
Please Enter A string: hello world
Out[1]: 'Hello World'
于 2013-05-15T09:50:36.943 に答える