Hola,
Tu solución organiza bien las reglas del sistema de transporte. Las variables mayor, medios y kilometros ayudan a dejar las condiciones más legibles, y la validación inicial con edad > 0 and km > 0 evita que el programa calcule tarifas con datos inválidos. También se entiende bien cómo separaste los casos por edad y luego por distancia.
Un detalle pequeño para ajustar está en la tarifa de adultos para hasta 20 km: aparece print("2.50"), sin el símbolo $, mientras las demás tarifas sí lo tienen. Podrías dejarlo como print("$2.50") para mantener el mismo patrón visual. En general, la lógica está clara y el uso de condicionales anidados quedó bien aplicado para esta actividad.
Cuenta con el apoyo de la comunidad Alura en tu jornada. Un abrazo y buenos estudios.