Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
225 views
in Technique[技术] by (71.8m points)

python - If function seems to be bypassing clause 1

I have a function that is erroring on occasion by letting in something I told it in the If statement to leave out. This function is being run over and over again during a while loop

def simulate_game(team1,rating1,team2,rating2):
    if team2 is "Bye":
        return team1
    else :
        matchup_arr = [team1,team2]
        pteam1 = 1/(1+10**((rating2-rating1)/250))
        pteam2 = 1- pteam1
        prob_arr = [pteam1,pteam2]
        winner = np.random.choice(matchup_arr,size=1,p=prob_arr)
    return winner

The formula is erroring when it is occasionally returning "Bye" but I feel like I have written it in a way that if team2 is "Bye"... it gets kicked But I am obviously missing something

Note: the file it is pulling from always lists a Bye in the Team2 spot


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You will need to use ==, not is, for equality comparisons:

if team2 == "Bye":

is is for identity comparison, which you need very, very rarely.

As an aside, you can do this without Numpy (though I might have the < operator the wrong way around here :-) ) since the probabilities would sum up to 1, and random.random() returns a random value between 0 and 1:

import random


def simulate_game(team1, rating1, team2, rating2):
    if team2 == "Bye":
        return team1

    pteam1 = 1 / (1 + 10 ** ((rating2 - rating1) / 250))
    return team1 if random.random() < pteam1 else team2

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...