簡體   English   中英

Python 如果 elif 和 else 語句不起作用

[英]Python if elif and else statement not working

我正在嘗試編寫一個簡短的腳本來娛樂自己和潛在的其他人。 當我運行它時,它往往會跳過 if elif 和 else 語句。

import random

adventure = ["fantasy" , "sci-fi" , "pirate" , "pre-history"]
setting = ["ocean", "forest" , "desert" , "castle"]
while True:

    adven = []
    setti = []
    random.shuffle(adventure)
    random.shuffle(setting)
    adven.append(adventure[0])
    setti.append(setting[0])
    print(adven)
    print(setti)
    accept = input("Is this acceptable? ")
    if accept == "y" :
        print("Great, let us get started!")
        break
    else :
        print("I am so sorry, lets try again!")
adve = []
sett = []
adve.append(adven)
sett.append(setti)

if adve == "fantasy" :
    if sett == "ocean" :
        print("1")
    elif sett == "forest" :
        print("2")
    elif sett == "desert" :
        print("3")
    elif sett == "castle" :
        print("4")
if adve == "sci-fi" :
    if sett == "ocean" :
        print("5")
    elif sett == "forest" :
        print("6")
    elif sett == "desert" :
        print("7")
    elif sett == "castle" :
        print("8")
if adve == "pirate" :
    if sett == "ocean" :
        print("9")
    elif sett == "forest" :
        print("10")
    elif sett == "desert" :
        print("11")
    elif sett == "castle" :
        print("12")
if adve == "pre-history" :
    if sett == "ocean" :
        print("13")
    elif sett == "forest" :
        print("14")
    elif sett == "desert" :
        print("15")
    elif sett == "castle" :
        print("16")

print(adve)
print(sett)

我需要將它保存在 while True 循環中嗎? 我不確定該怎么做,因為我想在我將任何真實的細節寫入腳本之前確保它能夠正常工作。

試試看in 如:

if "fantasy" in advve:

可能比==這里更適合你。

為什么? 因為您正在測試字符串是否字符串列表中。

不要忘記交換你的操作數。 不像== in cares 是第一位的。

據我了解,您希望在advensetti中有多個值,這就是為什么它是一個列表?

因此,首先,您應該在循環 scope 之外定義這些值:

adven = []
setti = []
while True:
    ...

您將列表附加到列表中,因此您在列表中獲得列表。

adve = []
adve.append(["random", "stuff"])
print(adve)
# [['random', 'stuff']]

將列表與字符串進行比較總是錯誤的,因為您比較的是不同類型的值。

print(adve == "random")
# False
print(["random"] == "random")
# False

要修復它,您應該:

# adve.append(adven)
adve = adven.copy()  # or simply `adve = adven`, or just use adven instead adve.
print(adve)
# ['random', 'stuff']

和:

# adve == "random"
print("random" in adve)
# True

順便說一句,你應該使用pop() function 所以你不會得到重復:

# adven.append(adventure[0])
# setti.append(setting[0])
adven.append(adventure.pop())
setti.append(setting.pop())

如果我誤解了,並且您不需要處理advensetti的多個值,那么您的代碼應該如下所示:

import random

adventure = ["fantasy", "sci-fi", "pirate", "pre-history"]
setting = ["ocean", "forest", "desert", "castle"]
while True:
    random.shuffle(adventure)
    random.shuffle(setting)
    adven = adventure[0]
    setti = setting[0]
    print(adven)
    print(setti)
    accept = input("Is this acceptable? ")
    if accept == "y":
        print("Great, let us get started!")
        break
    else:
        print("I am so sorry, lets try again!")
adve = adven
sett = setti


multiplier = 0
if adve == "fantasy":
    multiplier = 1
elif adve == "sci-fi":
    multiplier = 2
elif adve == "pirate":
    multiplier = 3
elif adve == "pre-history":
    multiplier = 4
else:
    print(f"issue with adve: {adve}")

if sett == "ocean":
    print(multiplier * 1)
elif sett == "forest":
    print(multiplier * 2)
elif sett == "desert":
    print(multiplier * 3)
elif sett == "castle":
    print(multiplier * 4)

print(adve)
print(sett)

還有一件事是錯誤的,如果你想提高你的編碼基礎,你只是沒有把 else 語句放在 elif 語句之后。 我建議您通過觀看像您這樣的項目來完成您的項目。

例如,您需要像這樣添加這個“else”語句:

if adve == "fantasy" :
    if sett == "ocean" :
        print("1")
    elif sett == "forest" :
        print("2")
    elif sett == "desert" :
        print("3")
    elif sett == "castle" :
        print("4")
    else :
        print("I am so sorry, you picked a wrong choice")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM