我上一次写有关CS50的写作是为了第3周的复数。
我看到,今年,该课程增加了一些非常有趣的劳动力,我将寻求执行并将其带入。
Semana 6:Python
第6周非常有趣,该课程介绍了动态语言 python ,并且仍然是整个课程的重读,因此现在以这种新语言。 P>
处理以前在语言C 中面临的困难,并打开像Python这样的语言所提供的设施,但很明显表示权衡。。
最后,提出了两项活动:
-
实验室:从理论上讲,这项活动有望与一两个朋友结交。 让我们在这篇文章中处理这个实验室。
-
问题集:SAM的活动,没有两个困难。本周特定于本周,它正在重做C中与python所面临的挑战。
当我已经在C中谈论过这些练习时,我计划将它们带到Python,但是如果您有生命,您正在谈论。
实验室:世界杯
我发现这项活动非常酷,是运行世界杯模拟。
- 有两个
.csv
电子表格,带有两个列(选择,评分)。 - farã使用
funções
,leitura de arquivos
,listas
和dicionários
操纵的概念以及所有其他基本编程块
预期的结果是输出这样的信息,以告知团队冠军的可能性。
$ python tournament.py 2018m.csv
Belgium: 20.9% chance of winning
Brazil: 20.3% chance of winning
Portugal: 14.5% chance of winning
Spain: 13.6% chance of winning
Switzerland: 10.5% chance of winning
Argentina: 6.5% chance of winning
England: 3.7% chance of winning
France: 3.3% chance of winning
Denmark: 2.2% chance of winning
Croatia: 2.0% chance of winning
Colombia: 1.8% chance of winning
Sweden: 0.5% chance of winning
Uruguay: 0.1% chance of winning
Mexico: 0.1% chance of winning
实施的详细信息
遵循site do cs50提供的实现步骤。
第一步。首先,在 main 上,阅读有关 csv
文件中选择的信息以记忆(存储在方差中),然后添加每个团队进入您的列表团队。
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
counts = {}
# TODO: Simulate N tournaments and keep track of win counts
# 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")
- 我们可以看到它应该通过命令行两个参数,其中一个是 koud0 file 。
- serã读 读取模式。
- 对于每行,让我们创建一个对键:value 在其中我们将进行选择及其各自的等级(note)
- 对于创建的每对,让我们添加在koud7 列表上。
teams = []
# TODO: Read teams into memory from file
with open(sys.argv[1], "r") as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
team = {"team": row["team"], "rating": int(row["rating"])}
teams += [team] #append each team in csv in teams list
第二步。然后,实现koud8函数。此功能将作为成员接收与团队的列表,模拟回合在©大约一个团队中。此功能必须返回该团队的名称。
def simulate_tournament(teams):
"""Simulate a tournament. Return name of winning team."""
# TODO
- já有一个
simulate_round(teams)
函数模拟回合。 - 我的羊毛说,模拟一轮只向一支球队进行模拟,即此列表的大小 只是一个团队。
def simulate_tournament(teams):
"""Simulate a tournament. Return name of winning team."""
# TODO
while len(teams) != 1:
teams = simulate_round(teams)
return teams
第三步。返回 funad main ,跑到 simulate_tournament
n,并保持记录,因为每个 团队赢得了在 dicionário
中称为counts 。
counts = {}
# TODO: Simulate N tournaments and keep track of win counts
- 执行
loops
n次称为funa koud8 。 - a 函数koud8 以这种格式返回列表:
[{'team': Brazil, 'rating': 1384}]
- 使用含义仅提取
team
键的值,我们检查了,如果dicionário
couts 已经包含了这个团队。 - 如果存在,它会增加1(一个)。如果没有,该团队将被添加到计数字典中。
counts = {}
# TODO: Simulate N tournaments and keep track of win counts
for i in range(N):
winner = simulate_tournament(teams)
print(winner[0]["team"])
if winner[0]["team"] not in counts:
counts.update({winner[0]["team"]: 1})
else:
counts[winner[0]["team"]] += 1
因此挑战完成了。
包括£o
这项实验室练习非常有趣,并且能够为您要使用的其他方式和比赛进行对抗的可能性。
我认为这个实验室非常好学习和练习Python语言的基本概念。
如果您和Dan在一起,或者您喜欢它。
在下面留下您的评论,然后将我添加到网中。
github:repositório da atividade | mpfdev (pessoal)