String terpanjang dalam urutan abjad

Kode ini berfungsi dengan baik untuk semua string, kecuali string yang memerlukan karakter terakhir.

s='abcdefghijklmnopqrstuvwxyz'
sub =''
test =s[0]

for n in range(len(s)-1):
    if len(test) > len(sub):
        sub = test
    if s[n] >= s[n-1]:
        test += s[n]
    else:
        test = s[n]

print 'Longest substring in alphabetic order is: ' + str(sub) 

How do you suggest a possibility for doing this?

Terima kasih sebelumnya kawan!

PS:

Terima kasih atas jawabannya sejauh ini. Masalahnya adalah, apa pun rentang yang saya ketik, sub variabel yang akan saya cetak tidak mendapatkan semua karakter yang saya inginkan. Perulangan selesai sebelum :\ Mungkin ada masalah dengan program itu sendiri.

Ada tips tambahan? :)


person makemesteaks    schedule 23.06.2014    source sumber
comment
Selain itu, Anda salah ketik pada print 'Logest substring..., seharusnya tertulis Longest (seperti pada judul Anda). / rewel   -  person Daan Timmer    schedule 23.06.2014


Jawaban (3)


Masalah Anda ada pada range(len(s)-1). Range menghasilkan daftar hingga nilai parameter batas atasnya-1 sehingga Anda tidak perlu mengurangi1 ke len(s), gunakan:

range(len(s))

Dari https://docs.python.org/2/library/functions.html#range

range(stop) range(start, stop[, step]) Ini adalah fungsi serbaguna untuk membuat daftar yang berisi perkembangan aritmatika. Ini paling sering digunakan dalam perulangan for. Argumennya harus berupa bilangan bulat. Jika argumen langkah dihilangkan, maka defaultnya adalah 1. Jika argumen awal dihilangkan, maka defaultnya adalah 0. Formulir lengkap mengembalikan daftar bilangan bulat biasa [mulai, mulai + langkah, mulai + 2 * langkah, ...] . Jika langkahnya positif, elemen terakhir adalah langkah awal + i * terbesar yang lebih kecil dari langkah berhenti; jika langkahnya negatif, elemen terakhir adalah langkah terkecil start + i * lebih besar dari berhenti. langkah tidak boleh nol

Di sisi lain, Anda memberi label pertanyaan Anda sebagai python2.7 jadi saya asumsikan Anda menggunakan 2.7. Jika demikian, akan lebih efisien menggunakan xrange daripada range karena dengan cara itu Anda akan menggunakan iterator daripada membuat daftar.

EDIT

Dari komentar hingga pertanyaan ini, Anda dapat mengubah kode Anda menjadi:

s='caabcdab'
sub =''
test =s[0]

for i in range(1,len(s)+1):
    n = i%len(s)
    if len(test) > len(sub):
        sub = test
        if i >= len(s):
            break
    if s[n] >= s[n-1]:
        test += s[n]
    else:
        test = s[n]

print 'Logest substring in alphabetic order is: ' + str(sub)
person Pablo Francisco Pérez Hidalgo    schedule 23.06.2014
comment
Terima kasih atas jawabannya, Pablo. Masalahnya adalah, apa pun rentang yang saya ketik, sub variabel yang akan saya cetak tidak mendapatkan semua karakter yang saya inginkan. Perulangan selesai sebelum :\ Mungkin ada masalah dengan program itu sendiri. - person makemesteaks; 23.06.2014
comment
@makemesteaks: Itu karena Anda menetapkan test ke sub sebelum menyelesaikan pemeriksaan di loop. Jadi pemeriksaan terakhir berhasil tetapi string yang diperbarui tidak ditetapkan ke sub. :) - person JRajan; 23.06.2014
comment
@makemesteaks Algoritma Anda perlu melakukan iterasi ke satu karakter lagi agar dapat menetapkan hasil terakhir. Coba dengan: for i in range(len(s)+1): n = i%len(s) - person Pablo Francisco Pérez Hidalgo; 23.06.2014
comment
Terima kasih Rajan! periksa jawaban saya tepat di bawah. Saya baru saja menetapkan cek ke akhir loop. Sekarang saya akan memeriksa dengan kasus yang berbeda dan saya akan terus mengabari Anda - person makemesteaks; 23.06.2014
comment
Terima kasih atas usahanya kawan. Jika saya memindahkan if len(test) > len(sub): sub = test ke akhir loop, itu juga tidak berhasil. Ditambah lagi, kode edit Anda, tidak berfungsi juga untuk beberapa kasus pengujian lainnya seperti misalnya: s = 'ocunhyfwiyizqh' seharusnya cu dan saya mendapatkan oo< /b>, misalnya. Maaf teman-teman, tapi ini jadi menyebalkan. - person makemesteaks; 23.06.2014
comment
Akhirnya! Terima kasih! :) Sekarang saya akan mempelajari kode ini! Terima kasih dan semoga harimu menyenangkan - person makemesteaks; 23.06.2014

kamu enemurate bukannya rentang:

 s='abcdefghijklmnopqrstuvwxyz'

sub =''
test =s[0]

for n,value in enumerate(s):
    if len(test) > len(sub):
        sub = test
    if value >= s[n-1]:
        test += s[n]
    else:
        test = s[n]
person sundar nataraj    schedule 23.06.2014

Anda bisa menggunakan kode berikut:

s = 'abcdefgahijkblmnopqrstcuvwxyz'
sub = ''
test = s[0]

for index, character in enumerate(s):
    if index > 0:
        if character > s[index - 1]:
            test += character
        else:
            test = character
    if len(test) > len(sub):
        sub = test
print 'Longest substring in alphabetic order is: ' + str(sub)

Beberapa petunjuk juga.

  1. String Python dapat diubah. yaitu Anda dapat mengulanginya.
  2. Gunakan enumerate ketika Anda menginginkan indeks daftar sambil mengulanginya.
person JRajan    schedule 23.06.2014