La razón de su código sólo se está volviendo un nombre se debe a que el día weekday
nunca coincidirán con más de una cuerda en el days
tupla y por lo tanto no va a añadir cualquiera de los días de la semana que lo sigue (ni se envuelve a los que están antes). Incluso si lo hiciera de alguna manera, todavía los devolvería todos como una cadena larga porque está inicializando result
en una cadena vacía, no en un list
vacío.
Aquí hay una solución que usa el módulo datetime
para crear una lista de todos los nombres de los días de la semana que comienzan con "Lunes" en el idioma de la configuración regional actual. Esta lista se usa para crear otra lista de nombres en el orden deseado que se devuelve. Realiza el pedido buscando el índice del día designado en la lista original y luego empalmando dos sectores de este en relación con ese índice para formar el resultado. Como optimización, también almacena en caché los nombres de día de la configuración regional, por lo que si alguna vez se llama nuevamente con la misma configuración regional actual (un escenario probable), no será necesario volver a crear esta lista privada.
import datetime
import locale
def weekdays(weekday):
current_locale = locale.getlocale()
if current_locale not in weekdays._days_cache:
# Add day names from a reference date, Monday 2001-Jan-1 to cache.
weekdays._days_cache[current_locale] = [
datetime.date(2001, 1, i).strftime('%A') for i in range(1, 8)]
days = weekdays._days_cache[current_locale]
index = days.index(weekday)
return days[index:] + days[:index]
weekdays._days_cache = {} # initialize cache
print(weekdays('Wednesday'))
# ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday']
Además de no necesitar de código duro día de nombres en la función, otra de las ventajas de utilizar el módulo de datetime
es que la utilización de código que va a funcionar automáticamente en otras lenguas. Esto se puede ilustrar cambiando la configuración regional y luego llamando a la función con un nombre de día en el idioma correspondiente.
Por ejemplo, aunque Francia no es mi configuración regional predeterminada, puedo configurarla para que sea la actual, como se muestra a continuación. Nota: Según este artículo Capitalization of day names, los nombres de los días de la semana no están en mayúscula en francés como en mi configuración predeterminada en inglés, pero eso también se tiene en cuenta automáticamente, lo que significa que el nombre weekday
que se le transfirió debe escribirse en el idioma de la configuración regional actual y también distingue entre mayúsculas y minúsculas. Por supuesto, puede modificar la función para ignorar el lettercase del argumento de entrada, si lo desea.
# set or change locale
locale.setlocale(locale.LC_ALL, 'french_france')
print(weekdays('mercredi')) # use French equivalent of 'Wednesday'
# ['mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'lundi', 'mardi']
buena y simple solución) – Gusto