Download Here

Note : The Entire's Copyright And Credits Of the Above Material, Guide Or Question Paper is Owned by the Respected Owner and author of the Material. We had Uploaded This Only For Educational.

Top Corner Ads

Below Of Download Button

February 26, 2024

NPTEL Programming, Data Structures And Algorithms Using Python (Week 5 Programming Assignment) 2024

4.5 Share It

Material Code -

Programming Assignment Solutions

Programming Assignment Week 5

Tennis Scoring Statistics

Here are some basic facts about tennis scoring: A tennis match is made up of sets. A set is made up of games.

To win a set, a player has to win 6 games with a difference of 2 games. At 6-6, there is often a special tie-breaker. In some cases, players go on playing till one of them wins the set with a difference of two games.

Tennis matches can be either 3 sets or 5 sets. The player who wins a majority of sets wins the match (i.e., 2 out 3 sets or 3 out of 5 sets) The score of a match lists out the games in each set, with the overall winner's score reported first for each set. Thus, if the score is 6-3, 5-7, 7-6 it means that the first player won the first set by 6 games to 3, lost the second one 5 games to 7 and won the third one 7 games to 6 (and hence won the overall match as well by 2 sets to 1).

You will read input from the keyboard (standard input) containing the results of several tennis matches. Each match's score is recorded on a separate line with the following format:

Winner:Loser:Set-1-score,...,Set-k-score, where 2 ≤ k ≤ 5

For example, an input line of the form

Jabeur:Swiatek:3-6,6-3,6-3

indicates that Jabeur beat Swiatek 3-6, 6-3, 6-3 in a best of 3 set match.

The input is terminated by a line consisting of the string "EOF".

You have to write a Python program that reads information about all the matches and compile the following statistics for each player:

  1. Number of best-of-5 set matches won
  2. Number of best-of-3 set matches won
  3. Number of sets won
  4. Number of games won
  5. Number of sets lost
  6. Number of games lost

You should print out to the screen (standard output) a summary in decreasing order of ranking, where the ranking is according to the criteria 1-6 in that order (compare item 1, if equal compare item 2, if equal compare item 3 etc, noting that for items 5 and 6 the comparison is reversed).

For instance, given the following data:

Zverev:Alcaraz:2-6,6-7,7-6,6-3,6-1
Swiatek:Jabeur:6-4,6-4
Alcaraz:Zverev:6-3,6-3
Jabeur:Swiatek:1-6,7-5,6-2
Zverev:Alcaraz:6-0,7-6,6-3
Jabeur:Swiatek:2-6,6-2,6-0
Alcaraz:Zverev:6-3,4-6,6-3,6-4
Swiatek:Jabeur:6-1,3-6,7-5
Zverev:Alcaraz:7-6,4-6,7-6,2-6,6-2
Jabeur:Swiatek:6-4,1-6,6-3
Alcaraz:Zverev:7-5,7-5
Jabeur:Swiatek:3-6,6-3,6-3
EOF

your program should print out the following:

Zverev 3 0 10 104 11 106
Alcaraz 1 2 11 106 10 104
Jabeur 0 4 9 76 8 74
Swiatek 0 2 8 74 9 76

You can assume that there are no spaces around the punctuation marks ":", "-" and ",". Each player's name will be spelled consistently and no two players have the same name.

Tennis Scoring Python Program

            
# Statistics will be stored as a dictionary
# Each key is a player name, each value is a list of 6 integers 
# representing 
#   Best of 5 set matches won,
#   Best of 3 set matches won,
#   Sets won
#   Games won
#   Sets lost (store as negative number for comparison)
#   Games lost (store as negative number for comparison)
stats = {}   

# Read a line of input
line = input()
while line != "EOF":
  # Keep track of sets/games won and lost in this match
  # with respect to winner of the match
  (wsets,lsets,wgames,lgames) = (0,0,0,0)
  # Extract winner, loser and string of setscores
  LineList = line.strip().split(':',2)
  (winner,loser,setscores) = ( LineList[0], LineList[1], LineList[2])

  # Extract sequence of sets from setscores
  sets = setscores.split(',')

  for set in sets:
    # Process each set
    (winstr,losestr) = set.split('-')
    win = int(winstr)
    lose = int(losestr)
    wgames = wgames + win
    lgames = lgames + lose
    if win > lose:
      wsets = wsets + 1
    else:
      lsets = lsets + 1

  # Update statistics for each of the players

  for player in [winner,loser]:
    try:
      stats[player]
    except KeyError:
      stats[player] = [0,0,0,0,0,0]

  if wsets >= 3:
    stats[winner][0] = stats[winner][0] + 1
  else:
    stats[winner][1] = stats[winner][1] + 1

  stats[winner][2] = stats[winner][2] + wsets
  stats[winner][3] = stats[winner][3] + wgames
  stats[winner][4] = stats[winner][4] - lsets
  stats[winner][5] = stats[winner][5] - lgames

  stats[loser][2] = stats[loser][2] + lsets
  stats[loser][3] = stats[loser][3] + lgames
  stats[loser][4] = stats[loser][4] - wsets
  stats[loser][5] = stats[loser][5] - wgames

  line = input()

# Collect each player's stats as a tuple, name last    
statlist = [(stat[0],stat[1],stat[2],stat[3],stat[4],stat[5],name) for name in stats.keys() for stat in [stats[name]]]

# Sort the statistics in descending order
# Losing games are stored negatively for sorting correctly
statlist.sort(reverse = True)

# Print
for entry in statlist:
    print(entry[6],entry[0],entry[1],entry[2],entry[3], -entry[4], -entry[5])
        

Rating and Reviews

No comments:

Post a Comment