Python หากคำสั่งไม่ได้รับการยอมรับแม้ว่าจะเป็นไปตามเงื่อนไขก็ตาม

ฉันกำลังพยายามเพิ่ม 1 ในการนับแต่ละครั้งที่มีตัวอักษรใหม่และติดตามตัวอักษรสองเท่า แต่ python จะไม่เข้าไปในคำสั่ง if แม้ว่าบรรทัดที่ 6 จะแสดงเงื่อนไขสำหรับคำสั่ง if ก็ตาม ฉันพลาดอะไรไป?

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")

ผลตอบแทนนี้:

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

person aj1000    schedule 16.07.2018    source แหล่งที่มา


คำตอบ (2)


in เป็นตัวดำเนินการเปรียบเทียบ ดังนั้น ถูกโยง กับ == การแสดงออกของคุณเทียบเท่ากับ

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

คุณสามารถ "ทำลายห่วงโซ่" ได้ หรือพูดง่ายๆ ก็คือใช้วงเล็บที่ชัดเจน:

if (i in double_letters) == False:

แต่การเปรียบเทียบโดยตรงกับตัวอักษรบูลีนนั้นแทบจะไม่เคย ถ้าจำเป็น แค่เขียน

if i not in double_letters:

(โปรดทราบว่า not in เป็นตัวดำเนินการแบบสองคำเดียว ไม่ใช่การประยุกต์ใช้ not ถึง in ซึ่งเทียบเท่ากับ in จะเป็น not (i in double_letters))

person chepner    schedule 16.07.2018
comment
แม้ว่าคุณจะจำเป็นต้องใช้ตัวอักษรก็ตาม is True ก็ยังดีกว่า == True - person Ankur S; 16.07.2018
comment
ทั้งสองค่อนข้างแย่มาก ฉันจะไม่รำคาญที่จะลองเลือกการตั้งค่า - person chepner; 16.07.2018
comment
@AnkurS is True ทดสอบตัวตน ดังนั้นจึงอาจไม่ให้ผลลัพธ์เหมือนกับ ` == True` ฉันไม่รู้ว่าคุณเคยเห็นที่ไหนมาก่อนว่าการทดสอบนี้จะไม่ผ่านการตรวจสอบโค้ด - person bruno desthuilliers; 16.07.2018
comment
@brunodeshuilliers ดู stackoverflow.com/a/24846681/1126841; รับประกันว่า True และ False จะไม่ซ้ำกัน เช่น None ดังนั้นอย่างน้อยก็จะปลอดภัยหากยังไม่จำเป็นหากใช้ is - person chepner; 16.07.2018

ฉันคิดว่าตรรกะของคุณมีข้อบกพร่องนอกเหนือจากการใช้งานที่ไม่ถูกต้องของตัวดำเนินการ ดูเหมือนว่าคุณกำลังพยายามนับจำนวนตัวอักษรที่ซ้ำกัน แต่ฉันไม่คิดว่าโปรแกรมของคุณจะสามารถทำได้

ฉันเดาว่าคุณคาดหวังอะไรเช่นนี้:

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")

ในโค้ดข้างต้น ฉันกำลังพยายามเพิ่มตัวอักษรทุกตัวในรายการ และหากซ้ำกัน ฉันจะเพิ่มจำนวน จากนี้ คุณควรได้รับ 2 เนื่องจาก a และ b ซ้ำกันในอินพุต

person Jay    schedule 16.07.2018
comment
ขอบคุณ นั่นคือสิ่งที่โปรแกรมของฉันตั้งใจจะทำ แต่เมื่อฉันได้รับข้อผิดพลาดนี้ ฉันจึงนำสิ่งที่ไม่ก่อให้เกิดปัญหาออกทั้งหมด เพื่อที่ฉันจะได้มุ่งเน้นไปที่ส่วนสำคัญในการโพสต์ที่นี่ โค้ดด้านบนเป็นเพียงส่วนที่เป็นปัญหาเท่านั้น - person aj1000; 17.07.2018