版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/dcjmessi/article/details/82286194
问题简述:有句俗语“三天打鱼两天晒网”,某人从2010年1月1日开始“三天打鱼两天晒网”,问这个人在以后的某一天是“打鱼”还是“晒网”
问题分析:根据输入年月日,求出天数,再对5求余,得出打鱼还是晒网
# _*_ coding: utf-8 _*_
# 作者:dcjmessi
# 日期:2018/8/29
from PyQt5.QtWidgets import *
import sys`
class Fishnet(QWidget):
def __init__(self):
super().__init__()
self.initUI()
#初始化界面
def initUI(self):
#设置窗口大小
self.setGeometry(500, 500, 400, 450)
#设置窗口标题
self.setWindowTitle('三天打鱼两天晒网')
#创建一个标签
self.lb1 = QLabel('年:', self)
self.lb1.move(20, 20)
self.lb2 = QLabel('月:', self)
self.lb2.move(20, 80)
self.lb3 = QLabel('日:', self)
self.lb3.move(20, 140)
#初始化年月日标签
self.lb4 = QLabel('2010', self)
self.lb4.move(80, 20)
self.lb5 = QLabel('01', self)
self.lb5.move(80, 80)
self.lb6 = QLabel('01', self)
self.lb6.move(80, 140)
#创建一个文本框
self.tb = QTextBrowser(self)
self.tb.move(20, 230)
#创建按钮
self.bt1 = QPushButton('修改年份', self)
self.bt1.move(200, 20)
self.bt2 = QPushButton('修改月份', self)
self.bt2.move(200, 80)
self.bt3 = QPushButton('修改日期', self)
self.bt3.move(200, 140)
self.bt4 = QPushButton('确定',self)
self.bt4.move(200, 180)
self.show()
#给按钮绑定事件
self.bt1.clicked.connect(self.showDialog)
self.bt2.clicked.connect(self.showDialog)
self.bt3.clicked.connect(self.showDialog)
self.bt4.clicked.connect(self.allday)
#输入年月日
def showDialog(self):
sender = self.sender()
if sender == self.bt1:
text, ok = QInputDialog.getInt(self, '修改年份', '请输入:', min = startyear)
if ok:
self.lb4.setText(str(text))
self.year = text
elif sender == self.bt2:
text, ok = QInputDialog.getInt(self, '修改月份', '请输入:', min = 1)
if ok:
#判断月份是否正确
if text <= 12:
self.lb5.setText(str(text))
self.month = text
else:
QMessageBox.information(self, "错误", "月份不正确", QMessageBox.Yes)
elif sender == self.bt3:
text, ok = QInputDialog.getInt(self, '修改日期', '请输入:', min = 1)
if ok:
#判断日期是否正确
if (self.month == 1) or (self.month == 3) or (self.month == 5) or (self.month == 7) or \
(self.month == 8) or (self.month == 10) or (self.month == 12):
if text <= 31:
self.lb6.setText(str(text))
self.day = text
else:
QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)
if (self.month == 4) or (self.month == 6) or (self.month == 9) or (self.month == 11):
if text <= 30:
self.lb6.setText(str(text))
self.day = text
else:
QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)
if (self.month == 2):
if (text == 28) or (text == 29):
self.lb6.setText(str(text))
self.day = text
else:
QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)
# 计算所输入的这一年天数
def thisyearday(self):
# 以平年为准,从1月1日到所输入月份的天数
months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
# 用months数组算出天数
self.sum = months[self.month - 1]
# 与当月天数相加
self.sum += self.day
# 判断所输入年份是否为闰年,如果是,则多加一天
if (self.year % 400 == 0) or (self.year % 4 == 0 and self.year % 100 != 0):
leap = 1
if (leap == 1) and (self.month > 2):
self.sum += 1
return self.sum
# 判断2010年是否为闰年,如果是,则多加一天
def startyearday(self):
if (startyear % 400 == 0) or (startyear % 4 == 0 and startyear % 100 != 0):
self.leap1 = 1
else:
self.leap1 = 0
return self.leap1
# 计算除2010年外的整年天数
def intactyearday(self):
i = 0
self.leap2 = 0
# 遍历2010到所输入年份之间的年份
if i < self.year - startyear - 1:
i += 1
nyear = 2010 + i
# 判断是否为闰年,如果是,则多加一天
if (nyear % 400 == 0) or ((nyear % 4 == 0) and (nyear % 100 != 0)):
self.leap2 += 1
return self.leap2
#计算总天数并得出结果
def allday(self):
self.thisyearday()
self.startyearday()
self.intactyearday()
#计算总天数
numdays = (self.year - startyear) * 365 + self.leap1 + self.leap2 + self.sum
#总天数除5求余,得到结果
self.result = numdays % 5
if (self.result == 1) or (self.result == 2) or (self.result == 3):
self.tb.setText("打鱼")
else:
self.tb.setText("晒网")
if __name__ == '__main__':
# 定义起始年份
startyear = 2010
app = QApplication(sys.argv)
ex = Fishnet()
sys.exit(app.exec_())
代码运行结果:
输入框:
错误提示框: