2015-04-04 2 views
1

Напишите функцию, которая поможет ответить на такие вопросы, как «» Сегодня среда. Я уезжаю в отпуск через 19 дней. В какой день это будет? »« Итак, функция должна именины и дельта-аргумент - количество дней, чтобы добавить - и должны возвратить полученные именины:Добавление дней к текущей дате python

def day_add(day, number): 
    if number == "0": 
     return day 
    else: 
     return 

result = day_add("Thursday", "0") 
print(result) 

assert "Friday" == day_add("Monday", "4"), "gives you back the day it will be if you add a certain number of days" 
assert "Tuesday" == day_add("Tuesday", "0"), "gives back the day you put in" 
+0

Пожалуйста, покажите, что у вас есть до сих пор. – Shashank

+0

Вы пытались использовать 'datetime' и' timedelta' из модуля [datetime] (https://docs.python.org/3/library/datetime.html)? – Navith

+0

Я еще не узнал ни одного из них - я вошел в класс python. Это то, что я до сих пор: Защиту day_add (день, номер): если число == "0": возвращение день еще: возвращение результат = day_add ("Четверг", "0") печать (результат) Утвердить «Пятницу» == day_add («Понедельник», «4»), «возвращает вас в тот день, когда будет добавлено определенное количество дней» утвердить «вторник» == day_add (" «Вторник», «0»), «возвращает день, в который вы положили» – nh919

ответ

2

Очевидно, что нужно перевести название дня в ряд, например, с помощью глобального списка:

DAYS = ['Sunday', 'Monday', ... , 'Saturday'] 

(замените ... на другие дни :-).

Чтобы перевести название дня в индекс в списке (число от 0 до 6 в комплекте), используйте метод списка index:

daynum = DAYS.index(dayname) 

, что повышает ValueError если dayname не является допустимым имя буднего дня , который, я думаю, в порядке, иначе у вас было бы насчет ваших характеристик для такой ошибки пользователя! (Я предполагаю, что dayname - это имя аргумента, которое принимает ваша функция).

Далее добавьте number к daynum и взять его по модулю 7, так что это снова число от 0 и 6 включены:

result_day = (daynum + number) % 7 

наконец, использовать этот индексировать список и возвращает результат:

return DAYS[result_day] 

Я надеюсь, что вы можете поместить их вместе в функции вам нужно, так что вы получите по крайней мере немного обучения из упражнения (в противоположность никто, если мы дали вам нужную функцию готово для копирования и вставки! -)

Редактировать: Я вижу number, вы проходите на самом деле строка - любая причина для этого очень своеобразного выбора ...? Если это часть действительно, действительно, очень удивительно странный спецификации, вам также необходимо сделать в ряд, конечно, - то есть, в самом начале,

number = int(number) 

предложение сохранить здравомыслие кто читает ваш код: сделать не имя number переменной, которая не ряд - как хорошо известный психологический тест, где у вас есть куча названий цветов каждый напечатанный в цвете другого от одного это присвоения имен , такого рода вещи действительно бросают мозги людей на петлю!-)

+0

Я пытаюсь пройти через это сейчас! – nh919

+0

@Shashank, вы правы, спасибо, редактирование, чтобы исправить «ментальную опечатку» :-). –

+0

все еще не работает ... каким-либо образом я мог бы изменить свой код вверх (я знаю, что ему не хватает некоторых бит) и заставить его работать? извините, я очень новичок в python и много борюсь! – nh919

0

Вы могли бы сделать индекс дней в словаре:

>>> dow={day:i for i, day in enumerate(['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'])} 

И инверсию, что:

>>> idow={i:day for day, i in dow.items()} 

Так что теперь у вас есть:

>>> dow 
{'Monday': 1, 'Tuesday': 2, 'Friday': 5, 'Wednesday': 3, 'Thursday': 4, 'Sunday': 0, 'Saturday': 6} 
>>> idow 
{0: 'Sunday', 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday'} 

Затем вы можете получить один от другого:

>>> idow[(dow['Wednesday']+19)%7] 
Monday 
0

Start со списком дней:

DAYS=['Sunday', 'Monday', ..., 'Saturday'] 

Вы можете использовать метод индексного списка, чтобы узнать местоположение индекса массива для предоставленного дня:

>>> print DAYS.index('Sunday') 
0 
>>> print DAYS.index('Monday') 
1 

Добавьте к этому количество дней с этого момента, и вы получите на следующий день в этой позиции индекса в списке дНЕЙ:

>>> todays_index=DAYS.index('Sunday') 
>>> days_from_now=3 
>>> print DAYS[todays_index+days_from_now] 
Wednesday 

это, Howeve r, работайте до 6 дней с воскресенья. Установка days_from_now на 7, очевидно, приведет к разрыву вещей и вызову IndexError. Однако, если вы вычислить модуль 7 days_from_now, вы можете гарантировать, что вы никогда не будете превышать 6:

# DAYS[0] == 'Sunday' 
# 7 days from now: DAYS[0+(7%7)] == DAYS[0+0] == DAYS[0] == 'Sunday' 
# 8 days from now: DAYS[0+(8%7)] == DAYS[0+1] == DAYS[1] == 'Monday' 
# 14 days from now: DAYS[0+(14%7)] == DAYS[0+0] == DAYS[0] == 'Saturday' 
# DAYS[1] == 'Monday' 
# 14 days from now: DAYS[1+(14%7)] == DAYS[1+0] == DAYS[1] == 'Monday' 
# 17 days from now: DAYS[1+(17%7)] == DAYS[1+3] == DAYS[4] == 'Thursday' 

Результирующая функция будет выглядеть следующим образом:

def day_add(day, days_from_now): 
    DAYS=['Sunday', 'Monday', ..., 'Saturday'] 
    if days_from_now == 0: 
     return day 
    else: 
     todays_index = DAYS.index(day) 
     return DAYS[todays_index+(days_from_now%7)] 
0
# Write the function day_name which is given a number, and returns its 
# name: 

def day_name(number): 
    if number == 0: 
     return ('Sunday') 
    elif number == 1: 
     return ('Monday') 
    elif number == 2: 
     return ('Tuesday') 
    elif number == 3: 
     return ('Wednesday') 
    elif number == 4: 
     return ('Thursday') 
    elif number == 5: 
     return ('Friday') 
    elif number == 6: 
     return ('Saturday') 
    else: 
     return None 

# Write the inverse function day_num which is given a day name, and returns its # number: 


def day_num(day_name): 
    if day_name == 'Sunday': 
     return (0) 
    elif day_name == 'Monday': 
     return (1) 
    elif day_name == 'Tuesday': 
     return (2) 
    elif day_name == 'Wednesday': 
     return (3) 
    elif day_name == 'Thursday': 
     return (4) 
    elif day_name == 'Friday': 
     return (5) 
    elif day_name == 'Saturday': 
     return (6) 
    else: 
     return None 

# Use composition to write the last function 
# If Sunday i'm leaving for 10 days, i will stay 1 week and 3 days. So the day 
# i'll be back will be 3 days from Sunday (Wednesday). 
# In code: day_back = (10 % 7) + (0) 

def day_add(today, stay): 
    today = day_num(today) 
    day_back = (stay % 7) + today 
    result = day_name(day_back) 
    return (result) 
Смежные вопросы