首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CS50 lab6世界杯simulate_tournament功能问题

CS50 lab6世界杯simulate_tournament功能问题
EN

Stack Overflow用户
提问于 2022-03-03 17:45:15
回答 2查看 486关注 0票数 0

我的tournament.py程序似乎运行得很好,但是通过check50运行它会产生一些错误,特别是simulate_tournament函数,说它没有正确返回获胜者的名字。这是我的密码:

代码语言:javascript
复制
# Simulate a sports tournament

import csv
import sys
import random

# Number of simluations to run
N = 1000


def main():

    # Ensure correct usage
    if len(sys.argv) != 2:
        sys.exit("Usage: python tournament.py FILENAME")

    teams = []
    # TODO: Read teams into memory from file
    f = open(sys.argv[1], "r")
    handle = csv.DictReader(f)
    for item in handle:
        item['rating'] = int(item['rating'])
        teams.append(item)

    counts = {}
    # TODO: Simulate N tournaments and keep track of win counts
    for i in range(N):
        winner = simulate_tournament(teams)
        if winner['team'] in counts:
            counts[winner['team']] += 1
        else:
            counts[winner['team']] = 1


    # Print each team's chances of winning, according to simulation
    for team in sorted(counts, key=lambda team: counts[team], reverse=True):
        print(f"{team}: {counts[team] * 100 / N:.1f}% chance of winning")


def simulate_game(team1, team2):
    """Simulate a game. Return True if team1 wins, False otherwise."""
    rating1 = team1["rating"]
    rating2 = team2["rating"]
    probability = 1 / (1 + 10 ** ((rating2 - rating1) / 600))
    return random.random() < probability


def simulate_round(teams):
    """Simulate a round. Return a list of winning teams."""
    winners = []

    # Simulate games for all pairs of teams
    for i in range(0, len(teams), 2):
        if simulate_game(teams[i], teams[i + 1]):
            winners.append(teams[i])
        else:
            winners.append(teams[i + 1])

    return winners


def simulate_tournament(teams):
    """Simulate a tournament. Return name of winning team."""
    # TODO
    while len(teams) != 1:
        teams = simulate_round(teams)
    return teams[0]


if __name__ == "__main__":
    main()

以及产出:

代码语言:javascript
复制
Brazil: 22.3% chance of winning
Belgium: 20.8% chance of winning
Portugal: 15.0% chance of winning
Switzerland: 10.8% chance of winning
Spain: 10.2% chance of winning
Argentina: 6.6% chance of winning
England: 3.4% chance of winning
France: 3.4% chance of winning
Denmark: 2.8% chance of winning
Croatia: 1.4% chance of winning
Colombia: 1.4% chance of winning
Mexico: 1.1% chance of winning
Sweden: 0.6% chance of winning
Uruguay: 0.2% chance of winning

是什么导致了这一切?我仍然不太熟悉python中的列表和字典,或者一般情况下的python。

这是检查50的结果:

代码语言:javascript
复制
:) tournament.py exists
:) tournament.py imports
:( simulate_tournament handles a bracket of size 2
    simulate_tournament fails to return the name of 1 winning team
:( simulate_tournament handles a bracket of size 4
    simulate_tournament fails to return the name of 1 winning team
:( simulate_tournament handles a bracket of size 8
    simulate_tournament fails to return the name of 1 winning team
:( simulate_tournament handles a bracket of size 16
    simulate_tournament fails to return the name of 1 winning team
:) correctly keeps track of wins
:) correctly reports team information for Men's World Cup
:) correctly reports team information for Women's World Cup
EN

回答 2

Stack Overflow用户

发布于 2022-03-25 16:02:15

idk为什么check50不识别“名称”,我使用以下代码进行了解析:

代码语言:javascript
复制
def simulate_tournament(teams):
# Simulate a tournament. Return name of winning team.
teamleft =list()
teamsLeft = teams
while len(teamsLeft) != 1:
    teamsLeft = simulate_round(teamsLeft)
winner=teamsLeft[0]
winnerValues = list(winner.values())
return winnerValues[0]

我创建了一个列表,其中包含了获胜国家的名称和他的排名,然后我返回了列表,所以这个名字和它起了作用。

票数 0
EN

Stack Overflow用户

发布于 2022-10-09 00:09:29

谢谢您的回答,Gennaro,这给了我一个定义simulate_tournament函数如下的想法,它也起了作用:

代码语言:javascript
复制
def simulate_tournament(teams):
    """Simulate a tournament. Return name of winning team."""
    # TODO
    while len(teams) != 1:
        teams = simulate_round(teams)
    winner = teams[0]
    return winner["team"]

看到那个胜利者变成了一个迪克,它有一个与键"team“相关联的值,这个值就是胜利者的名字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71341532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档