阅读有关网球锦标赛的数据。脚本概括问题

时间:2018-03-26 00:46:00

标签: python python-3.x

示例文件和预期结果:

> file_1.txt
A. Aardvark d. C. Capybara
C. Capybara d. B. Badger
C. Capybara d. F. Flamingo
A. Aardvark d. G. Goat
F. Flamingo d. Bye
E. Echidna d. D. Dolphin
A. Aardvark d. E. Echidna

> python spoon.py file_1.txt
No one wins the wooden spoon.

示例文件和预期结果:

> file_2.txt
C. Capybara d. A. Aardvark
C. Capybara d. B. Badger
C. Capybara d. F. Flamingo
A. Aardvark d. G. Goat
F. Flamingo d. Bye
E. Echidna d. D. Dolphin
A. Aardvark d. E. Echidna

> python spoon.py file_2.txt
D. Dolphin wins the wooden spoon!

QF: E. Echidna d. D. Dolphin
SF: A. Aardvark d. E. Echidna
F: C. Capybara d. A. Aardvark

信息:

  • 编写一个从文件中读取数据的脚本。
  • 数据包括个人比赛的结果 网球锦标赛。
  • 数据按随机顺序排列。第一行包含 匹配并不一定意味着它是第一场比赛 播放了。
  • 使用脚本确定谁赢木勺。
  • 如果有人确实赢了木勺 - 请确保打印所有的木勺 确定了勺子结果的比赛。

我做了什么:

  • 我想出了如何为每个“轮”制作列表 如果共有三组“回合”,则参加比赛。 含义:四分之一决赛,半决赛,决赛。
  • 我基本上写了一个脚本,遍历每一行 数据并找到失败者(玩家二)的名字所在的匹配项 “正在分析的线”与获胜者的名字不匹配 (球员一)。
  • 我使用的是输家和赢家,因为d。指“被击败”。
  • 一旦我创建了“三个”列表,我就会向后工作 使用决赛中失败者的名字,找到他/她的比赛 在半决赛中。然后,我接受那场比赛的失败者并找到 他/她在四分之一决赛中的比赛。
  • 基本上,这个“第一”匹配的失败者(在这种情况下是四分之一 得到木勺。
  • 如果那场比赛的输家是“再见”,那么没有人能拿到木勺。

的问题:

  • 如果只有三个“回合”,我的脚本效果很好 匹配。
  • 如果比赛的数量增加或减少超过“总数 三轮“它没有提供正确的数据。”
  • 我想帮助推广我的解决方案,以便它可以正常工作 无论文件中的数据有多大或多小。
  • 理想情况下,我希望脚本能够遍历所有数据 并且在没有我必须编码多个的情况下找出所有内容 场景包括可能会进入第50轮的场景。

示例问题情景和预期结果:

> file_3.txt
A. Aardvark d. C. Capybara
A. Aardvark d. E. Echidna
C. Capybara d. F. Flamingo

> python spoon.py file_2.txt
F. Flamingo wins the wooden spoon!
SF: C. Capybara d. F. Flamingo
F: A. Aardvark d. C. Capybara

当前结果:

- Traceback (most recent call last):
-   File "woodenspoon.py", line 56, in <module>
-     winner, loser = final.split(' d. ')
- NameError: name 'final' is not defined

我目前的守则/进展:

import sys

if len(sys.argv) < 2:
    sys.exit("No file specified")
try:
    filename = sys.argv[1]
    file = open(filename, 'r')
except:
    sys.exit("Could not read file")

outcome = []
for line in file:
    outcome.append(line.strip())

element_index = len(outcome)-1
round_1 = []

for i in range(0, element_index):
    isSame = False
    for d in range(i+1, element_index):
        org_player_1, org_player_2 = outcome[i].split(' d. ')
        comp_player_1, comp_player_2 = outcome[d].split(' d. ')
        if org_player_2 == comp_player_1:
            isSame = True
    if isSame == False:
        round_1.append(outcome[i])

for i in range(len(round_1)):
    try:
        outcome.remove(round_1[i])
    except:
        pass

element_index = len(outcome)
round_2 = []

for i in range(0, element_index):
    isSame = False
    for d in range(i+1, element_index):
        org_player_1, org_player_2 = outcome[i].split(' d. ')
        comp_player_1, comp_player_2 = outcome[d].split(' d. ')
        if org_player_2 == comp_player_1:
            isSame = True
    if isSame == False:
        round_2.append(outcome[i])

for i in range(len(round_2)):
    try:
        outcome.remove(round_2[i])
    except:
        pass

for e in outcome:
    final = e

winner, loser = final.split(' d. ')

for e in round_2:
    if loser in e:
        semifinal = e

winner, loser = semifinal.split(' d. ')

for e in round_1:
    if loser in e:
        quaterfinal = e

winner, loser = quaterfinal.split(' d. ')

if "Bye" in loser:
    print("No one wins the wooden spoon.")
else:
    print("{} wins the wooden spoon!\n".format(loser))
    print("QF: {}".format(quaterfinal))
    print("SF: {}".format(semifinal))
    print("F: {}".format(final))

注意:

  • 我为长篇文章/问题道歉。我想尝试提供 尽可能详细。
  • 我希望我没有错过关于剧本的任何关键细节 及其运作方式以及预期。
  • 我对Python有一个相当基本的了解。我仍然在学习它。
  • 感谢您的时间和帮助。非常感谢!

0 个答案:

没有答案