Python-日历专家-我的算法和逻辑是否正确?
我做了一些研究,并用Python编写了一个程序,以这种格式显示伊斯兰日历的日期 工作日名称、日期、月份、年份 我想在我的一个应用程序中使用它。我只是想知道我的密码是否正确。我根本不是日历专家。我很困惑我的代码是否遗漏了什么,最终日期误导了人们!有人能检查一下代码并告诉我我是否做错了什么吗Python-日历专家-我的算法和逻辑是否正确?,python,calendar,jodatime,Python,Calendar,Jodatime,我做了一些研究,并用Python编写了一个程序,以这种格式显示伊斯兰日历的日期 工作日名称、日期、月份、年份 我想在我的一个应用程序中使用它。我只是想知道我的密码是否正确。我根本不是日历专家。我很困惑我的代码是否遗漏了什么,最终日期误导了人们!有人能检查一下代码并告诉我我是否做错了什么吗 #Get current date. import datetime now = datetime.datetime.now() year = now.year month = now.month day =
#Get current date.
import datetime
now = datetime.datetime.now()
year = now.year
month = now.month
day = now.day
weekday_number = now.weekday()
#Convert current date to Julian date.
from calverter import Calverter
cal = Calverter()
julian = cal.gregorian_to_jd(year,month,day)
#Convert Julian date to Islamic date.
hijri = cal.jd_to_islamic(julian)
#Convert Islamic date to weekday_name, day_number, month_name, year format.
hijri_year = hijri[0]
hijri_month = hijri[1]
hijri_day_number = hijri[2]
hijri_date = [weekday_number, hijri_day_number, hijri_month, hijri_year]
#Convert hijri_month (which are in number forms) into month names.
if hijri_month == 1:
hijri_date[2] = "Muharram"
elif hijri_month == 2:
hijri_date[2] = "Safar"
elif hijri_month == 3:
hijri_date[2] = "Rabi al Awwal"
elif hijri_month == 4:
hijri_date[2] = "Rabi ath Thani"
elif hijri_month == 5:
hijri_date[2] = "Jamada al Ula"
elif hijri_month == 6:
hijri_date[2] = "Jumada ath Thaniyah"
elif hijri_month == 7:
hijri_date[2] = "Rajab"
elif hijri_month == 8:
hijri_date[2] = "Shaban"
elif hijri_month == 9:
hijri_date[2] = "Ramadan"
elif hijri_month == 10:
hijri_date[2] = "Shawal"
elif hijri_month == 11:
hijri_date[2] = "Dhu al Qa'dah"
elif hijri_month == 12:
hijri_date[2] = "Dhu al Hijah"
#Convert weekday_numbers into weekday names.
if weekday_number == 0:
hijri_date[0] = "Al Ithnayn"
elif weekday_number == 1:
hijri_date[0] = "Ath Thulatha"
elif weekday_number == 2:
hijri_date[0] = "Al Arbia"
elif weekday_number == 3:
hijri_date[0] = "Al khamis"
elif weekday_number == 4:
hijri_date[0] = "Al Jumuah"
elif weekday_number == 5:
hijri_date[0] = "As Sabt"
elif weekday_number == 6:
hijri_date[0] = "Al Ahad"
print hijri_date
我用pycalverter图书馆做了一些事情。如果有人愿意,我可以把开源pycalverter的代码放在一个粘贴箱中 我有几点建议 首先,如果您不确定代码是否正确(即使您确定),请编写并运行测试。您可以使用一个测试库(如和等),或者只实现一些简单的测试,以确保一切都按预期进行。如果你是测试新手,你可以在网上找到关于它的信息 其次,您所有的
if
s可以替换为两个列表(一个用于月,一个用于天):
#只需定义12个月的名称:
伊斯兰月=[“穆哈拉姆”、“萨法尔”、“拉比·阿瓦尔”,
“Rabi ath Thani”,“Jamada al-Ula”,
“Jumada ath Thaniyah”、“Rajab”、“Shaban”,
“斋月”、“沙瓦尔”、“基地组织”、“基地组织”]
#在下一步中,请使用正确的名称:
hijri_日期[2]=伊斯兰月[hijri_月-1]#1您的代码有什么问题?给我们举一个预期产出和实际产出的例子output@VaibhavMule我自己想知道在使用此模块部署我的应用程序之前是否存在任何逻辑错误。:)如果没有可识别的问题,则这是StackOverflow的主题。考虑一下,但是你应该在发布之前测试你的代码。@ JPMC26请注意,不是为了“告诉我我的代码是否正确”,而是“我的代码是正确的——我如何使它更好?”@ LeoDevlar,我们否决问题,而不是用户。请看的上半部分,特别是:“上/下投票系统不仅仅是代表,它是堆栈交换的质量控制机制。”@sovolevn我试图给你投票,但它说我需要15个声誉来给你投票。否则我会投你一票,因为你的回答很好。我不明白你的例子。你能举个例子吗?我想我是在拐弯抹角,我已经更新了我的答案。用列表代替你的“如果条件”。@LeoDevlar,你明白我的意思吗?是的。我想你希望我避免直接使用名称而不是索引。我用名字是有原因的。我现在交叉检查我的输出与在线hijri日期日历的输出。我突然有了这个想法。到目前为止,一切都很好。尽管我计划到2021年至少进行15次交叉匹配。据我所知,我使用的Python库最多只能给出2021年的正确结果。一旦我完成代码测试并与在线日历进行比较,我将编辑我的程序。让我们一个接一个地做……:)@我不懂这句话hijri\u日期[2]=伊斯兰月[hijri\u月-1]
我们在这里做什么?这是否意味着我不需要使用12 if条件?我不明白。
# Just define 12 months names:
islamic_months = ["Muharram", "Safar", "Rabi al Awwal",
"Rabi ath Thani", "Jamada al Ula",
"Jumada ath Thaniyah", "Rajab", "Shaban",
"Ramadan", "Shawal", "Dhu al Qa'dah", "Dhu al Hijah"]
# On the next step get the right name:
hijri_date[2] = islamic_months[hijri_month - 1] # 1 <= hijri_month <= 12
islamic_day_names = ["Al Ithnayn", "Ath Thulatha", "Al Arbia",
"Al khamis", "Al Jumuah", "As Sabt", "Al Ahad"]
hijri_date[0] = islamic_day_names[weekday_number] # 0 <= weekday_number <= 6