微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不能使用三个if语句来代替一个if语句和两个elif语句?

如何解决为什么不能使用三个if语句来代替一个if语句和两个elif语句?

我正在努力了解在特定代码https://www.datacamp.com/community/tutorials/markov-chains-python-tutorial中使用elif的情况。

在下面的复制粘贴的代码中,一旦进入while循环,就会有一个if语句(如果是activityToday == "Sleep",则输入)和两个elif语句(如果是{enter,则输入分别为activityToday == "Run"activityToday == "Icecream"

如果运行代码,则会得到预期的输出

Start state: Run
Possible states: ['Run','Icecream','Run']
End state after 2 days: Run
Probability of the possible sequence of states: 0.21

如果我将两个elif语句更改为两个if语句,则会得到一些意外的输出

Start state: Run
Possible states: ['Run','Run','Run']
End state after 2 days: Run
Probability of the possible sequence of states: 0.25

问题是我不理解意外的输出我不明白为什么我不能用两个elif语句替换两个if语句,然后将它们作为三个单独的循环而不是一个if进行循环两个elif有人可以向我解释一下吗?

感谢您的帮助!

import numpy as np
import random as rm

# The statespace
states = ["Sleep","Icecream","Run"]

# Possible sequences of events
transitionName = [["SS","SR","SI"],["RS","RR","RI"],["IS","IR","II"]]

# Probabilities matrix (transition matrix)
transitionMatrix = [[0.2,0.6,0.2],[0.1,0.3],[0.2,0.7,0.1]]

# FROM THE TUTORIAL 

# A function that implements the Markov model to forecast the state/mood.
def activity_forecast(days):
    # Choose the starting state
    activityToday = "Run"
    print("Start state: " + activityToday)
    # Shall store the sequence of states taken. So,this only has the starting state for Now.
    activityList = [activityToday]
    i = 0
    # To calculate the probability of the activityList
    prob = 1
    while i != days:
        if activityToday == "Sleep":
            change = np.random.choice(transitionName[0],replace=True,p=transitionMatrix[0])
            if change == "SS":
                prob = prob * 0.2
                activityList.append("Sleep")
                pass
            elif change == "SR":
                prob = prob * 0.6
                activityToday = "Run"
                activityList.append("Run")
            else:
                prob = prob * 0.2
                activityToday = "Icecream"
                activityList.append("Icecream")
        elif activityToday == "Run":                            # WHY CAN'T I CHANGE 'ELIF' TO 'IF' ??????
            change = np.random.choice(transitionName[1],p=transitionMatrix[1])
            if change == "RR":
                prob = prob * 0.5
                activityList.append("Run")
                pass
            elif change == "RS":
                prob = prob * 0.2
                activityToday = "Sleep"
                activityList.append("Sleep")
            else:
                prob = prob * 0.3
                activityToday = "Icecream"
                activityList.append("Icecream")
        elif activityToday == "Icecream":                        # WHY CAN'T I CHANGE 'ELIF' TO 'IF' ??????
            change = np.random.choice(transitionName[2],p=transitionMatrix[2])
            if change == "II":
                prob = prob * 0.1
                activityList.append("Icecream")
                pass
            elif change == "IS":
                prob = prob * 0.2
                activityToday = "Sleep"
                activityList.append("Sleep")
            else:
                prob = prob * 0.7
                activityToday = "Run"
                activityList.append("Run")
        i += 1  
    print("Possible states: " + str(activityList))
    print("End state after "+ str(days) + " days: " + activityToday)
    print("Probability of the possible sequence of states: " + str(prob))

# Function that forecasts the possible state for the next 2 days
activity_forecast(2)

解决方法

您无法执行此操作,因为您在activityToday / if语句中更改了elif的值。因此,没有elif,两个条件块可以在while循环的一次迭代中运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。