Files
Python-Programming-Exercise/20210727-第7章.py
2025-09-25 21:23:34 +08:00

143 lines
4.6 KiB
Python

# ==============================================================================
# 通过 D:\文档\电子文档\个人\脚本库\PythonScript\第7章.py + 题号 运行
# 程序名:
# 第7章习题
# 目的:
#
# 修订记录:
# 日期 编程者 改动描述
# =================== ============= =====================================
# 2021-07-27 17:51:57 Sola 7-1 ~ 7-10 略
# 2021-07-27 19:36:11 Sola 7-11 闰年计算
# 2021-07-27 19:44:24 Sola 7-12 日期有效性判断
# 2021-07-27 19:58:14 Sola 7-13 计算某一天是一年中的第几天
# 2021-07-27 20:11:04 Sola 7-14 ~ 7-15 略,做过了
# 2021-07-27 20:18:46 Sola 7-16 箭靶计分
# 2021-07-27 20:39:32 Sola 7-17 弹球
# 2021-07-27 21:54:58 Sola 7-18 略
def IsLeapYear(year):
if year != int(year):
print("错误:请输入整数年份!")
return -1
if year % 4 == 0 and year % 400 != 0:
return True
else:
return False
def IsTrueDate(date):
# need function: IsLeapYear
dateList = date.split('/')
day = int(dateList[0])
month = int(dateList[1])
year = int(dateList[2])
if month > 12 or month < 0:
# print("错误:月份范围错误,请检查输入!")
return False
if IsLeapYear(year):
monthList = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else:
monthList = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if day > monthList[month - 1] or day < 0:
# print("错误:日期范围错误,请检查输入!")
return False
return True
def GetDateNum(date):
# need function: IsTrueDate, IsLeapYear
if IsTrueDate(date):
dateList = date.split('/')
day = int(dateList[0])
month = int(dateList[1])
year = int(dateList[2])
if IsLeapYear(year):
monthList = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else:
monthList = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
dateNum = 0
for i in range(month - 1):
dateNum = dateNum + monthList[i]
return dateNum + day
else:
return -1
def Test7_11():
year = int(input("请输入年份:"))
if IsLeapYear(year):
print("{0}是闰年".format(year))
else:
print("{0}不是闰年".format(year))
def Test7_12():
date = input("请按照 dd/mm/yyyy 格式输入日期:")
if IsTrueDate(date):
print("{0} 是有效的日期!".format(date))
else:
print("{0} 是无效的日期!".format(date))
def Test7_13():
date = input("请按照 dd/mm/yyyy 格式输入日期:")
dateNum = GetDateNum(date)
if dateNum > 0:
print("{0} 是该年份的第{1}".format(date, dateNum))
else:
print("错误:输入的日期非法!")
def Test7_16():
from graphics import GraphWin, Circle, Text, Point
win = GraphWin()
def draw_circle(r, s_fill):
shape = Circle(Point(100, 90), r)
shape.setFill(s_fill)
shape.setOutline("black")
shape.clone().draw(win)
draw_circle(75, "white")
draw_circle(60, "black")
draw_circle(45, "blue")
draw_circle(30, "red")
draw_circle(15, "yellow")
scoreSum = 0
scoreText = Text(Point(15, 15), '')
scoreText.draw(win)
for i in range(5):
target = win.getMouse()
score = max(9 - ((target.getX() - 100) ** 2 + (target.getY() - 90) ** 2) ** 0.5
// 15 * 2, 0)
scoreText.setText(str(int(score)))
scoreSum = scoreSum + score
scoreText.undraw()
Text(Point(100, 180), "Your average score is {0}!\n".format(scoreSum / 5) +
"Click again to quit").draw(win)
win.getMouse()
win.close()
def Test7_17():
from graphics import GraphWin, Circle, Text, Point, update
h0 = 144
x0 = 20
xx = 0
win = GraphWin()
win.setCoords(0, 0, 200, 200)
ball = Circle(Point(x0, h0), 20)
ball.setFill("blue")
ball.setOutline("black")
ball.draw(win)
n = 5000
for i in range(n):
ht = (144 - (i % 24 - 12) ** 2) * (n - i) / n + 20
vx = 7 * (n - i) / n
xx = xx + vx
xt = 20 + abs(xx % 320 - 160)
dh = ht - h0
dx = xt - x0
h0 = ht
x0 = xt
ball.move(dx, dh)
update(30)
Text(Point(100, 100), "Click to quit").draw(win)
win.getMouse()
import sys
def Run(num):
eval("Test7_" + num + "()")
Run(sys.argv[1])