<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_font(self, weight='medium', slant='upright', width='normal'):
 """Return the font matching or closest to the given style If a font with the given weight, slant and width is available, return it. Otherwise, return the font that is closest in style. Args: weight (FontWeight):
 weight of the font slant (FontSlant):
 slant of the font width (FontWidth):
 width of the font Returns: Font: the requested font """

        def find_closest_style(style, styles, alternatives):
            try:
                return style, styles[style]
            except KeyError:
                for option in alternatives[style]:
                    try:
                        return option, styles[option]
                    except KeyError:
                        continue

        def find_closest_weight(weight, weights):
            index = FontWeight.values.index(weight)
            min_distance = len(FontWeight.values)
            closest = None
            for i, option in enumerate(FontWeight.values):
                if option in weights and abs(index - i) < min_distance:
                    min_distance = abs(index - i)
                    closest = option
            return closest, weights[closest]

        available_width, slants = find_closest_style(width, self,
                                                     FontWidth.alternatives)
        available_slant, weights = find_closest_style(slant, slants,
                                                      FontSlant.alternatives)
        available_weight, font = find_closest_weight(weight, weights)

        if (available_width != width or available_slant != slant or
            available_weight != weight):
            warn('{} does not include a {} {} {} font. Falling back to {} {} '
                 '{}'.format(self.name, width, weight, slant, available_width,
                             available_weight, available_slant))
        return font