Saya memiliki kode ini yang menemukan indeks terbesar dari karakter tertentu dalam sebuah string, namun saya ingin menaikkannya ValueError
ketika karakter yang ditentukan tidak muncul dalam string.
Jadi seperti ini:
contains('bababa', 'k')
akan menghasilkan:
→ ValueError: could not find k in bababa
Bagaimana saya bisa melakukan ini?
Inilah kode saat ini untuk fungsi saya:
def contains(string,char):
list = []
for i in range(0,len(string)):
if string[i] == char:
list = list + [i]
return list[-1]
Jawaban:
raise ValueError('could not find %c in %s' % (ch,str))
sumber
raise ValueError
melakukannyaraise ValueError()
?Berikut adalah versi revisi dari kode Anda yang masih berfungsi ditambah itu menggambarkan cara menaikkan
ValueError
seperti yang Anda inginkan. By-the-way, saya pikirfind_last()
,find_last_index()
, atau sesuatu simlar akan menjadi nama yang lebih deskriptif untuk fungsi ini. Menambah kebingungan yang mungkin terjadi adalah fakta bahwa Python sudah memiliki metode objek kontainer bernama__contains__()
yang melakukan sesuatu yang sedikit berbeda, berdasarkan pengujian keanggotaan.Perbarui - Cara yang jauh lebih sederhana
Wow! Ini adalah versi yang jauh lebih ringkas — pada dasarnya satu baris — yang juga cenderung lebih cepat karena membalik (melalui
[::-1]
) string sebelum melakukan penelusuran maju melaluinya untuk karakter pertama yang cocok dan melakukannya menggunakanindex()
metode string built-in cepat . Sehubungan dengan pertanyaan Anda yang sebenarnya, sedikit bonus kenyamanan yang datang dengan penggunaanindex()
adalah bahwa hal itu sudah memunculkanValueError
saat substring karakter tidak ditemukan, jadi tidak ada tambahan yang diperlukan untuk mewujudkannya.Ini dia bersama dengan unit test cepat:
sumber
for
loop. Fungsi pertama: FAIL forcontains('foo', 'f')
.for
loop dalam sebuah jawaban meskipun ada yang muncul dalam kode mereka sendiri. Bagaimanapun saya fungsi menunjukkan 1 mereka bagaimanaraise
sebuahValueError
ketika karakter tidak ditemukan yang merupakan apa yang mereka minta. dan saya telah mengilustrasikan bagaimana melakukannya dalam konteks afor
. Bahkan jika mereka menginginkanfor
karena alasan tertentu, saya pikir orang lain mungkin menemukan versi ke-2 tanpa setidaknya agak menarik.for
lingkaran, itu tidak dengan cara menjawab pertanyaan yang sebenarnya tentang bagaimanaraise
sebuahValueError
ketika karakter tidak ditemukan dalam string - yaitu dengan memanggil sesuatu yang lain yang melakukannya untuk Anda. Ada juga kemungkinan bahwa OP mungkin akan melupakanfor
-fixation mereka atau apapun itu setelah melihatfor
solusi sans- atau menjadi lebih akrab dengan Python nanti.sumber
sumber