如何解决为什么不能使用三个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 举报,一经查实,本站将立刻删除。