sentence = str ( input ( "Enter a sentence:" ) )
sentence = sentence.split ( )

new = ""
for word in sentence:
    wordi = ord ( word[ 0 ] )
    cap = word[ 0 ]
    a = chr ( (ord ( cap ) - 32) )
    word1 = word.replace ( word[ 0 ] ,a )

    if wordi <= 122 and wordi >= 97:
        new = new + word1 + " "
    else:
        new = new + word + " "

print ( new )

Saya telah menulis tentang kode yang akan menggunakan huruf kapital untuk semua huruf pertama dalam kalimat tanpa menggunakan fungsi kapitalisasi atau atas. Kode yang saya tulis memang tampak baik-baik saja ketika huruf di dalam kata tidak sama dengan huruf yang ingin saya kapitalkan.

Masukan:

Hello world

Hasil:

Hello World

Namun, jika huruf dalam kata juga sama dengan huruf yang ingin saya kapitalkan, huruf di dalam kata juga akan menjadi kapital.

Masukan:

helloh worldw

Hasil:

HelloH WorldW

Saya mencoba untuk mengganti variabel "a" di dalam pengganti dan menambahkan a ke yang baru juga di variabel baru dalam pernyataan if-else.

sentence = str ( input ( "Enter a sentence:" ) )
sentence = sentence.split ( )

new = ""
for word in sentence:
    wordi = ord ( word[ 0 ] )
    cap = word[ 0 ]
    a = chr ( (ord ( cap ) - 32) )
    word1 = word.replace ( word[ 0 ] ,"" )

    if wordi <= 122 and wordi >= 97:
        new = new + a + word1 + " "
    else:
        new = new + word + " "

print ( new )

Tapi, kodenya ternyata huruf yang diulang-ulang dalam kata tersebut akan terhapus saat dicetak.

Masukan:

helloh 

Hasil:

Hello

Bagaimana saya bisa membuat kode berfungsi?

2
Peter 11 Mei 2021, 18:56

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan parameter count dari str.replace metode, untuk mengganti hanya sekali

word1 = word.replace(word[0], a, 1)

Masukkan semuanya ke dalam metode, untuk memudahkan penggunaan, dan Anda mendapatkan

def capitalize(sentence):
    if isinstance(sentence, str):    # handle string, if wasn't splitted already
        sentence = sentence.split()
    new = ""
    for word in sentence:
        ow = ord(word[0])
        if 97 <= ow <= 122:
            new += word.replace(word[0], chr(ow - 32), 1) + " "
        else:
            new += word + " "
    return new


print(capitalize(["Hello", "worldw"]))  # Hello Worldw
print(capitalize("Hello worldw"))       # Hello Worldw
1
azro 11 Mei 2021, 16:12

Karena Anda tidak dapat menggunakan metode str.upper(), mari kita definisikan sendiri fungsi upper():

def upper(char):
    # If more than one characters are given, capitalize all of them 
    if len(char) > 1:
        return ''.join(upper(c) for c in char)
    
    # if given character is between lowercase a and z, shift it to uppercase
    if "a" <= char <= "z":
        return chr(ord(char) - 32)
    else: # if not, return it unchanged
        return char

Anda hanya ingin mengganti karakter pertama dengan huruf kapital. Sayangnya, string tidak dapat diubah sehingga Anda tidak bisa begitu saja melakukan word[0] = word[0].upper()

Namun, Anda dapat membangun kembali string dengan memotong karakter pertamanya dari karakter lainnya seperti: word = word[0].upper() + word[1:].

Atau, menggunakan fungsi upper() kami: word = upper(word[0]) + word[1:].

Menerapkan ini dengan kode Anda:

sentence = str ( input ( "Enter a sentence:" ) )
sentence = sentence.split ( )

newsentence = []
for word in sentence:
    newword = upper(word[0]) + word[1:]
    newsentence.append(newword)

print(' '.join(newsentence))

Tentu saja, for-loop dapat diganti dengan pemahaman daftar,

sentence = str ( input ( "Enter a sentence:" ) )
sentence = sentence.split ( )

newsentence = [upper(word[0]) + word[1:] for word in sentence]
print(' '.join(newsentence))

# Or you could pass the generator expression to the `str.join()` call
# To do this, replace the previous two lines with:
# print(' '.join(word[0].upper() + word[1:] for word in sentence))

Menjalankan ini dengan input Anda helloh worldw memberikan output yang Anda harapkan:

Enter a sentence:helloh worldw
Helloh Worldw
0
Pranav Hosangadi 11 Mei 2021, 17:34