Трудности с реализацией правил персидского календаря в Python - PullRequest
0 голосов
/ 10 мая 2018

Я пишу код, который чем-то напоминает персидский календарь.Есть 3 выпадающих списка для года, месяца и дня.Вот правила, которые я хотел бы включить:

  • Месяцы с 1 по 6 имеют 31 день
  • Месяцы с 7 по 11 имеют 30 дней
  • Месяц 12 имеет 29дней каждые 4 года
  • 12-й месяц имеет 30 дней (високосный год)

Если пользователь выбирает один из (1 - 2 - 3 - 4 - 5 - 6) месяцев,раскрывающийся список для дней должен иметь 31 день.

Если пользователь выбирает один из (7 - 8 - 9 - 10 - 11) месяцев, раскрывающийся список для дней должен иметь 30 дней.

Если пользователь выбирает 12-й месяц, выпадающий список для дней должен иметь 29 дней.

Если пользователь выбирает один из (1375 - 1379 - 1383 - 1387 - 1391 - 1395) года иесли он выбирает 12-й месяц, выпадающий список для дней должен иметь 30 дней.

Вот код, который я написал до сих пор, но мой код не работает, пожалуйста, помогите мне с этим.

from tkinter import *

x=StringVar()

def ok():
    if months == months[0:5]:
     x = dayoptions1
    if months == months[6:10]:
     x = dayoptions2
    if months == months[11] and years == 1375 or 1379 or 1383 or 1387 or 1391 or 1395:
     x = dayoptions3


root = Tk()

label1 = Label(root, text="year",width=15)
label1.grid(row=0, column=0)

yearoptions = ["1397", "1396","1395","1394","1393","1392","1391","1390","1389","1388","1387","1386","1385","1384","1383","1382","1381","1380","1379","1378","1377","1376","1375"]
yearvariable = StringVar(root)
yearvariable.set(yearoptions[0])

years = OptionMenu(root, yearvariable, *yearoptions)
years.grid(row=0,column=1,padx=5, pady=5)

label2 = Label(root, text="month",width=15)
label2.grid(row=0, column=2)

monthoptions = ["1", "2","3","4","5","6","7","8","9","10","11","12"]
monthvariable = StringVar(root)
monthvariable.set(monthoptions[0])

months = OptionMenu(root, monthvariable, *monthoptions)
months.grid(row=0,column=3,padx=5, pady=5)

label1 = Label(root, text="day",width=15)
label1.grid(row=0, column=4)

dayoptions1 = ["1", "2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]
dayoptions2 = ["1", "2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"]
dayoptions3 = ["1", "2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29"]
dayvariable = StringVar(root)
dayvariable.set("1")

days = OptionMenu(root, dayvariable, *x)
days.grid(row=0,column=5,padx=5, pady=5)


root.mainloop()

1 Ответ

0 голосов
/ 10 мая 2018

Хорошо, я не tkinter, поэтому я написал функцию, но она работает. Дни зависят от того, какой месяц и год выбрал пользователь. Таким образом, в сценарии пользователь выбирает 1383 - 12 (1383 год из 12-го месяца), вам нужно выяснить, является ли 1383 високосным годом, а затем заполнить список дней на 30 дней, иначе это будет 29 дней. Если вы используете выбор от 1 до 6 месяцев, заполните массив 31 днем, а остаток месяца - 30 дней. Я написал короткую вспомогательную функцию, чтобы проверить это, и я думаю, что это работает.

def persian_calender():
    user_input = input("year - month:: ")
    date_list = user_input.split("-")
    leap_year = [1375, 1379 ,1383, 1387 ,1391 ,1395]
    year = int(date_list[0])
    month = int (date_list[1])

    if year in leap_year:
        is_leap = True
    else:
        is_leap = False

    if month >= 1 and month <= 6:
        number_of_days = "31"
    elif month >= 7 and month <= 11:
        number_of_days = "30"
    else:
        if is_leap:
            number_of_days = "30"
        else:
            number_of_days = "29"
     print ("Year: " + date_list[0] + " Month: "+ date_list[1] + " Days: "
       + number_of_days)

Проверьте файл кода здесь

Надеюсь, это поможет. Ура!

[Изменить 2]
Вы написали вспомогательную функцию Ok, которая определяет, какой сейчас месяц. Вместо того, чтобы писать свой список вручную, просто объявите количество дней в нем. Если вы хотите или пора заполнить раскрывающийся список дней, запустите и заполните список эквивалентным количеством дней. Имею ли я смысл ?!

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