Ada kesalahan ketika saya mengeksekusi kode ini- untuk i dalam len(str_list): TypeError: 'int' objek tidak dapat diiterasi
Bagaimana cara memperbaikinya? (Python 3)
def str_avg(str):
str_list=str.split()
str_sum=0
for i in len(str_list):
str_sum += len(str_list[i])
return str_sum/i
Anda mencoba untuk mengulang-ulang dalam bilangan bulat; len()
mengembalikan satu.
Jika Anda harus menghasilkan perulangan atas urutan bilangan bulat, gunakan objek range()
:
for i in range(len(str_list)):
# ...
Dengan melewatkan hasil len(str_list)
ke
range(), anda akan mendapatkan urutan dari nol sampai panjang
str_list`, dikurangi satu (karena nilai akhir tidak disertakan).
Perhatikan bahwa sekarang nilai i
anda akan menjadi nilai salah yang digunakan untuk menghitung rata-rata, karena nilai tersebut satu lebih kecil dari panjang daftar yang sebenarnya! Anda ingin membagi dengan len(str_list)
:
return str_sum / len(str_list)
Namun, tidak perlu melakukan hal ini dalam Python. Anda mengulang elemen-elemen dari daftar itu sendiri. Itu menghilangkan kebutuhan untuk membuat indeks terlebih dahulu:
for elem in str_list
str_sum += len(elem)
return str_sum / len(str_list)
Semua ini dapat dinyatakan dalam satu baris dengan fungsi sum()
, by the way:
def str_avg(s):
str_list = s.split()
return sum(len(w) for w in str_list) / len(str_list)
Saya mengganti nama str
dengan s
; lebih baik tidak menutupi nama tipe bawaan, yang dapat menyebabkan kesalahan yang membingungkan di kemudian hari.
def str_avg(str):
str_list = str.split()
str_sum = len(''.join(str_list)) # get the total number of characters in str
str_count = len(str_list) # get the total words
return (str_sum / str_count)
Untuk loop membutuhkan beberapa item untuk diiterasi seperti daftar [1, 2, 3] (berisi 3 item/elemen).
Fungsi len mengembalikan satu item yang merupakan bilangan bulat dari panjang objek yang Anda berikan sebagai parameter.
Untuk membuat sesuatu iterasi sebanyak panjang objek, Anda dapat memberikan hasil fungsi len ke fungsi range. Ini menciptakan iterable yang memungkinkan Anda untuk mengiterasi sebanyak panjang objek yang Anda inginkan.
Jadi lakukan sesuatu seperti
for i in range(len(str_list)):
kecuali jika Anda ingin menelusuri daftar dan bukan panjang daftar. Anda kemudian bisa mengiterasi dengan
for i in str_list: