Используя numpy, чтобы вычислить день недели для данного дд / мм, учитывая день 1 января - PullRequest
0 голосов
/ 05 декабря 2018

Я делаю прошлую работу для пересмотра экзамена и застрял в этом вопросе:

Напишите скрипт на python, чтобы принять от пользователя день недели, на который 1 января приходится на определенный год, а затемраспечатать день недели для любого другого месяца и день месяца, указанного пользователем.Вы можете предположить, что год не является високосным, что пользователь вводит ввод в качестве первых трех букв любого слова и что ранее был определен следующий код:

import numpy as np
months = np.array(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])
ndays = np.array([31,28,31,30,31,30,31,31,30,31,30,31])
days=np.array(['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])

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

user_Jan_1_day = input('Input the day of the week for Jan 1st: ')
user_month = input('Input the month: ')
user_day = input('Input the day of the month required: ')

Итак, скажем, пользователь сказал, что 1 января было «СБ», и они хотят, чтобы день недели был «Март ',' 1 ', т.е. 1 марта.

Я знаю, что мне нужно взять 31 + 28 + 1. Найти сумму = 60. Возьмите модуль: 60% 7 = 4, а затем добавьте четыре неделидней до «Sat», чтобы получить «Wed» в качестве ответа, но как мне это сделать в Python?

Я думал, что смогу сделать это, используя индекс массива, поэтому я использовал

a=np.where(months==user_month)
no_of_days = 0
for i in range (a):
    no_of_days =+ ndays[i]

но я получаю ошибку: "объект 'tuple' не может быть интерпретирован как целое число"

Может кто-нибудь показать мне, как это сделать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Функция range() принимает целое число.Но a само по себе не является целым числом.Поэтому попробуйте использовать range(a[0][0]):

for i in range(range(a[0][0])):
    no_of_days += ndays[i]
no_of_days += int(user_day)

Кроме того, ваш "= +" должен быть "+ =", как показано здесь.

Это дает вам желаемую дату в виде количества днейв календарный год.Оттуда вы можете использовать некоторую модульную арифметику ("%") этого с днем ​​1 января против вашего days массива.

0 голосов
/ 05 декабря 2018

Следуя в значительной степени вашей точной логике, вы можете сделать это следующим образом, без необходимости повторения (убедитесь, что для user_day вместо * по умолчанию введен int(input(...))):

user_Jan_1_day = input('Input the day of the week for Jan 1st: ')
user_month = input('Input the month: ')
user_day = int(input('Input the day of the month required: '))

m = np.where(months == user_month)[0][0]
d = np.where(days == user_Jan_1_day)[0][0]
# or, maybe more straightforward, since there is only one correct value:
# m = list(months).index(user_month)
# d = list(days).index(user_Jan_1_day)

result = days[(np.sum(ndays[:m]) + user_day + d) % 7]

Например :

>>> user_Jan_1_day = input('Input the day of the week for Jan 1st: ')
Input the day of the week for Jan 1st: Sat
>>> user_month = input('Input the month: ')
Input the month: Mar
>>> user_day = int(input('Input the day of the month required: '))
Input the day of the month required: 1

>>> m = np.where(months == user_month)[0][0]
>>> d = np.where(days == user_Jan_1_day)[0][0]
>>> result = days[(np.sum(ndays[:m]) + user_day + d) % 7]

>>> result
'Wed'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...