我已经完成了使用Python创建Golf Stableford计算器程序的任务,该程序将从sys.stdin读取文本文件并输出文本文件中每个高尔夫球手的Handicap得分。在文本文件中,第一行是所有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的在线指南,这可能有助于我完成这个程序,但它让我无处可去。我知道这是一项相当大的任务,所以如果你们中的某些人有可能帮助我,我会非常感激。谢谢阅读。
答案 0 :(得分:0)
如何将str.rsplit
与maxsplit
参数一起使用?
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']
答案 1 :(得分:0)
在高尔夫球场上,规则课程中的每个洞都根据您的数据集中的难度进行排名。但是,在计算高尔夫球手给定球洞的净得分时,您必须考虑球场的差点。例如,如果高尔夫是10个差点,那么他/她只能获得10个最难洞的差点。
以下是几个例子 高尔夫球手的差点:10 第4洞,难度4,高尔夫球手的总得分:8,高尔夫球手的净得分:7 洞#7,难度12,高尔夫球手的总得分:6,高尔夫球手的净得分:6(在这种情况下净和总数相同,因为高尔夫球手的差点为10,洞难度为12)