Pernyataan Python if tidak dikenali meskipun kondisi tampaknya terpenuhi

Saya mencoba menambahkan 1 ke hitungan setiap kali ada huruf baru dan melacak huruf ganda, tetapi python tidak masuk ke pernyataan if, meskipun baris 6 menunjukkan kondisi pernyataan if terpenuhi. Apa yang saya lewatkan?

def duplicate_count(text):
    count = 0
    doubled_letters = []
    for i in text:
        print (i)
        print(i in doubled_letters)
        if i in doubled_letters == False:
            count += 1
            doubled_letters.append(i)
    print(count)
    print(doubled_letters)
    return count

duplicate_count("abbcdea")

ini mengembalikan:

a
False
b
False
b
False
c
False
d
False
e
False
a
False
0
[]

person aj1000    schedule 16.07.2018    source sumber


Jawaban (2)


in adalah operator perbandingan, sehingga dirangkai dengan ==. Ekspresimu setara dengan

(i in doubled_letters) and (double_letters == False)

Anda dapat "memutus rantai", dengan menggunakan tanda kurung eksplisit:

if (i in double_letters) == False:

namun perbandingan langsung dengan literal Boolean jarang diperlukan. Tulis saja

if i not in double_letters:

(Perhatikan bahwa not in adalah operator tunggal dua kata, bukan penerapan not hingga in. Setara dengan in adalah not (i in double_letters).)

person chepner    schedule 16.07.2018
comment
bahkan jika Anda perlu menggunakan literal, is True lebih disukai daripada == True - person Ankur S; 16.07.2018
comment
Keduanya sangat buruk; Saya tidak akan repot-repot mencoba memilih preferensi. - person chepner; 16.07.2018
comment
@AnkurS is True menguji identitas, sehingga mungkin tidak memberikan hasil yang sama seperti ` == True`. Saya tidak tahu di mana Anda pernah melihat bahwa ini lebih disukai, sejauh yang saya ketahui, tes semacam itu tidak akan lulus tinjauan kode. - person bruno desthuilliers; 16.07.2018
comment
@brunodesthuilliers Lihat stackoverflow.com/a/24846681/1126841; True dan False dijamin unik, seperti None, jadi setidaknya aman, jika masih tidak diperlukan, menggunakan is. - person chepner; 16.07.2018

Menurut saya logika Anda juga salah selain penggunaan operator yang salah. Sepertinya Anda mencoba menghitung huruf duplikat, tetapi menurut saya program Anda tidak akan mampu melakukannya.

Saya kira Anda mengharapkan sesuatu seperti ini:

def duplicate_count(text):
    count = 0
    letters = []
    for i in text:
        if i not in doubled_letters:
            letters.append(i)
        else:
            count += 1

    print(count)
    return count

duplicate_count("abbcdea")

Dalam kode di atas, saya mencoba menambahkan setiap huruf ke daftar dan jika terduplikasi, saya menambah jumlahnya. Berdasarkan ini, Anda seharusnya mendapatkan 2 karena a dan b diduplikasi pada input.

person Jay    schedule 16.07.2018
comment
terima kasih, itulah tujuan program saya, tetapi ketika saya terus mendapatkan kesalahan ini, saya menghapus semua hal yang tidak menyebabkan masalah sehingga saya dapat fokus pada bagian penting yang akan diposting di sini. Kode di atas hanyalah bagian yang bermasalah. - person aj1000; 17.07.2018