自娱自乐:python与C++结合验证农历数据是否正确

这个还是个自娱自乐的工作。

昨天已经通过python已经把1901到2019年的所有数据修正完成,真的很快,不到半个小时就全完成了,所以今天就要校对数据是否准确,本来应该是准确的,但可能由于我输入错误导致错误出现,所以必须验证。

验证方法:

1、先用C++取每个月的5、25日两天,每年取24个数据,计算出农历,保存到文件中,不管闰月,如果有一个月数据有错误肯定影响到其他月份。

2、python也计算每月的5、25日两天的农历,与文件中保存的数据进行比较。有错误输出,无错误不输出。

C++的部分基本在原文件上改就行了,很简单,只是原来输出到屏幕,现在写到文件。

第一步:生成文本文件

第二步:运行python进行核对,两边都输入相同的年份。

输入1902数据正确,输入1903的时候出现错误,因为文本保存的是1902年的数据。

这样基本很快能就核对完成了。

贴一下python的原码:

#!/usr/bin/python
# -*- coding:utf-8 -*-

from borax.calendars.lunardate import LunarDate

while (True):
    f=open('e:\\aaa123.txt','r')  #打开用C++生成的文件
    Nf=input("请输入年份:")   #输入16位数据所属年份
    #Ddate=[5,25]    
    for i in range(1,13):
        LunarD=LunarDate.from_solar_date(int(Nf),i,5) #查出每个月5日的农历
        
        if LunarD.strftime('%y%m%d')!=f.readline()[:-1]:#与存储文件中的日期比较
            print("数据有错误:",Nf,i,5)              #如果不相等则数据有问题
        LunarD1=LunarDate.from_solar_date(int(Nf),i,25)
        
        if LunarD1.strftime('%y%m%d')!=f.readline()[:-1]:
            print("数据有错误:",Nf,i,25)
        
    f.close() #关闭文件 

C++部分:


#include <iostream>
#include <ctime>
#include "lunarday.h"
#include<fstream>


int main(int argc, char *argv[])
{
	using namespace std;
	using namespace lunar;
	
	
	int year;
	int month;
	int day;
	ofstream outfile;
	outfile.open("e:\\aaa123.txt");
	while (true){
		
		cout << "请输入年份:";
		cin >> year;
		
		int my_array[2] = { 5,25 };

		for (int month = 1; month < 13; month++) {
			for (int &day : my_array) {
				Date lunar_date = LuanrDate(year, month, day);
				//cout << "输入的日期为:" << endl;
				//cout<<month << "月" << day << "日" << endl;
				if (lunar_date.day == 0) {  //判断这天的日期是否为0,错误的农历日期为0.
					//cout << endl;
					//cout << "调整后除夕日期:" << endl;
					cout << lunar_date.year << "年";
					outfile << lunar_date.year;
					cout << "12月";         //因为就是除夕不对,所在这天一定是农历12月。
					outfile << "12";
					day = day - 1;          //日期减一天。
					Date lunar_date = LuanrDate(year, month, day);//重新计算前一天的农历,必须重新计算。
					cout << lunar_date.day + 1 << "日" << endl;  //计算前一天农历日期后加1得到正确的除夕农历日期。
					outfile << lunar_date.day + 1 << endl;
					//outfile.close();
				}
				else {                     //不是除夕的日期是正确的正常计算。
					cout << lunar_date.year;
					outfile << lunar_date.year;
					//if (lunar_date.leap)
					//	cout << "闰";
					cout << lunar_date.month ;
					outfile << lunar_date.month;
					cout << lunar_date.day << endl;
					outfile << lunar_date.day << endl;
					
					//cout << endl;

				}
			}
		}


		outfile.close();
		
		return 0;

	}	
		
}

有个小遗憾,Python可以实现循环,基本只要输入年份就可以了,但C++没成功,每次都要重新编译。应该也可以解决,只是现在不想研究了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kim5659

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值