action = input("\nOption: ")
if action.lower() == "1" or "door":
    if kitchen_key == 0:
        typewriter("You try to wrestle the door open, you swear you could remove the door from it's hinges... ... ... ... But you fail, you dejectedly return to the kitchen.")
        time.sleep(1)
        kitchen_choices()
    elif kitchen_key == 1:
        typewriter("With your newfound key you swiftly jam the key into the hole and twist. CLUNK! The sound of being one step closer to freedom! You pull the door open and continue on your way!")
        time.sleep(1)
        print("proceeding to next room")
if action.lower() == "2" or "stove":
    stove()

Di atas saya meminta masukan dari pengguna dan memberikan hasil tergantung pada apa yang mereka ketik. Namun di atas hanya menjalankan opsi pertama jadi: "Anda mencoba membuka pintu, Anda bersumpah Anda bisa melepas pintu dari engselnya" adalah hasil saya, bahkan jika saya menekan 2. Namun jika saya menggunakan "dan" sebagai ganti "atau" berfungsi tetapi tidak akan menerima string seperti "pintu" atau "kompor" dan hanya 1 atau 2. Dapatkah seseorang menjelaskan bagaimana kesalahan ini terjadi dan apa yang dapat saya lakukan untuk memperbaikinya.

Ini untuk proyek pemula tetapi tidak ada tim saya yang tahu mengapa ini terjadi. Terima kasih.

0
digitl_devl 12 Mei 2021, 15:10

3 jawaban

Jawaban Terbaik

Masalah dengan kode Anda adalah or adalah operator boolean. Baris Anda

if action.lower() == "1" or "door":

Setara dengan

if (action.lower() == "1") or "door":

Karena string yang tidak kosong selalu mengembalikan nilai true. Pernyataan boolean dievaluasi menjadi:

if (action.lower() == "1") or True:

Dan ordengan True selalu mengembalikan kondisi. Jadi kode tersebut dievaluasi menjadi

if action.lower() == "1":

Untuk memperbaikinya yang perlu Anda lakukan adalah meletakkan or di antara dua pernyataan boolean

if action.lower() == "1" or action.lower() == "door":

Dan serupa

if action.lower() == "2" or action.lower() == "stove":

Atau Anda melakukan seperti yang disarankan dan dilakukan SorousH Bakhiatry

if action.lower() in ("1", "door"):

Tapi itu kurang terbaca menurut saya.

0
kinshukdua 12 Mei 2021, 12:27

Solusi saya adalah melakukan pemeriksaan variabel di sisi lain dari or...

if action.lower() == "1" or action.lower() == "stairs":

Serta mengubah kedua jika ke elif ...

elif action.lower() == "2" or action.lower() == "stove": 
    stove()

Terima kasih atas tanggapan dan jawaban Anda, ada hal-hal yang Anda tautkan yang perlu saya teliti. Terima kasih!

0
digitl_devl 12 Mei 2021, 12:31

and dan or bertindak berbeda dari bahasa Inggris. Berikut ini tautan jika Anda ingin mempelajari lebih lanjut: dari dokumen

Ubah kondisi Anda menjadi:

if action.lower() in ("1", "door"):
0
SorousH Bakhtiary 12 Mei 2021, 12:16