如何在 Python 中创建 Golf Stableford 计算器

How to create a Golf Stableford Calculator in Python

我的任务是在 Python 中制作 Golf Stableford 计算器程序,该程序将从 sys.stdin 中读取文本文件并在文本文件中输出每个高尔夫球手的差点分数。在文本文件中,第一行是所有 18 个洞的每个洞的标准杆,第二行是每个洞的索引(难度排名)。接下来的每一行都有高尔夫球手的名字、高尔夫球手的差点杆数以及他们在 1-18 号洞的每个洞的杆数。如果高尔夫球手的得分为 "X",则该洞将被忽略。如果它还有任何其他内容,则该高尔夫球手将被取消资格。

这是给定的文本文件:

4 5 3 4 4 5 3 5 3 5 3 4 4 4 4 5 4 3
16 4 8 2 18 14 10 6 12 11 15 5 13 1 17 7 3 9
Raspberry Pie 14 4 7 3 5 10 7 4 12 4 5 3 4 4 5 5 5 4 4
Penelope Perkins 17 4 7 3 5 10 7 4 12 4 5 3 4 4 5 5 5 4 4
Bambi 19 5 6 4 5 5 6 4 6 ; 6 4 5 5 5 5 6 5 4
Sylvester The Cat 36 X X X X X X X X X X X X X X X X X X
Sneezy 18 5 6 4 5 5 6 4 6 4 6 4 5 5 5 5 6 5 4
Juninho 18 5 6 4 5 5 6 4 6 4 A 4 5 5 5 5 6 5 4
Shere Khan 7 4 X 3 4 4 5 1 4 3 5 3 X 4 4 4 5 4 3
Alexis de Sart 0 4 3 1 X 2 5 3 4 1 5 3 3 3 3 3 5 4 3

这是所需的输出:

$ python3 stableford.py < golf.txt
   Alexis de Sart : 47
       Shere Khan : 40
 Penelope Perkins : 38
           Sneezy : 36
    Raspberry Pie : 35
Sylvester The Cat :  0
            Bambi : Disqualified
          Juninho : Disqualified

我想我已经弄明白了如何计算每个高尔夫球手的差点分数。您找到高尔夫球手在每个洞的击球次数与打洞所需的击球次数之间的差异,找到该差异值的差点数(例如 +2=0、+1=1、0=2、 -1=3 等)并将其添加到每行开头的障碍笔画中。我还知道我可以通过使用异常处理来取消这两个高尔夫球手的资格。

我在弄清楚如何将名称分配给值时遇到问题。我知道我可以使用字典为值分配一个键,但我不确定如何使用正则表达式获取全名而不在文本文件中显示其他字母。

这是我用来到达那个阶段的代码:

import sys
import re
par=sys.stdin.readline().split()
Index=sys.stdin.readline().split()
everything="".join(sys.stdin.readlines())
name=r"([A-Za-z][A-Za-z]*)"
name_regex = re.compile(name)
namelist = name_regex.findall(everything)
for n in namelist:
        print(n)

在过去的几个小时里,我一直在谷歌上搜索信息,从这里过去的问题到 python 上的在线指南,这些信息可能会帮助我完成这个程序,但我一无所获。我知道这是一项相当艰巨的任务,所以如果你们中的一些人可以帮助我,我将不胜感激。谢谢阅读。

如何使用 str.rsplitmaxsplit 参数?

import io

s = """Raspberry Pie 14 4 7 3 5 10 7 4 12 4 5 3 4 4 5 5 5 4 4
Penelope Perkins 17 4 7 3 5 10 7 4 12 4 5 3 4 4 5 5 5 4 4
Bambi 19 5 6 4 5 5 6 4 6 ; 6 4 5 5 5 5 6 5 4
Sylvester The Cat 36 X X X X X X X X X X X X X X X X X X
Sneezy 18 5 6 4 5 5 6 4 6 4 6 4 5 5 5 5 6 5 4
Juninho 18 5 6 4 5 5 6 4 6 4 A 4 5 5 5 5 6 5 4
Shere Khan 7 4 X 3 4 4 5 1 4 3 5 3 X 4 4 4 5 4 3
Alexis de Sart 0 4 3 1 X 2 5 3 4 1 5 3 3 3 3 3 5 4 3"""

file = io.StringIO(s)
for line in file:
    name, handicap, *scores = line.rstrip().rsplit(maxsplit=19)
    print('{} | {} | {}'.format(name, handicap, scores))

# Output
# Raspberry Pie | 14 | ['4', '7', '3', '5', '10', '7', '4', '12', '4', '5', '3', '4', '4', '5', '5', '5', '4', '4']
# Penelope Perkins | 17 | ['4', '7', '3', '5', '10', '7', '4', '12', '4', '5', '3', '4', '4', '5', '5', '5', '4', '4']
# Bambi | 19 | ['5', '6', '4', '5', '5', '6', '4', '6', ';', '6', '4', '5', '5', '5', '5', '6', '5', '4']
# Sylvester The Cat | 36 | ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
# Sneezy | 18 | ['5', '6', '4', '5', '5', '6', '4', '6', '4', '6', '4', '5', '5', '5', '5', '6', '5', '4']
# Juninho | 18 | ['5', '6', '4', '5', '5', '6', '4', '6', '4', 'A', '4', '5', '5', '5', '5', '6', '5', '4']
# Shere Khan | 7 | ['4', 'X', '3', '4', '4', '5', '1', '4', '3', '5', '3', 'X', '4', '4', '4', '5', '4', '3']
# Alexis de Sart | 0 | ['4', '3', '1', 'X', '2', '5', '3', '4', '1', '5', '3', '3', '3', '3', '3', '5', '4', '3']

在高尔夫中,规则球场上的每个洞都根据您在数据集中的难度进行排名。但是,在计算给定球洞的高尔夫球手净得分时,您必须考虑球场的差点。例如,如果高尔夫球的差点为 10,那么 he/she 只会获得 10 个最难球洞的差点杆数。

这里有几个例子 高尔夫球手的差点:10 第 4 洞,难度 4,球手总杆数:8,球手净杆数:7 第 7 洞,难度 12,高尔夫球手的总杆数:6,高尔夫球手的净杆数:6(在这种情况下,净杆数和总杆数相同,因为高尔夫球手的差点为 10,球洞难度为 12)