【Python练习】task-08 综合练习
1.已知1800年1月1日是星期三。输入一个日期,使用自定义函数计算是星期几
说明:关于日期和时间有专门的包操作。这里不用,自己设计计算
import datetime
import re
def date_time(year,month,day):
return datetime.date(year,month,day).isoweekday()
times=input("输入时间****-**-**")
str=re.split("[/\-,]",times)
year=int(str[0])
month=int(str[1])
day=int(str[2])
print(times,"是星期",date_time(year,month,day))
2.题目要求:输入英文字母,输出星期几。
解析:输入星期几的英语单词的第一个字母,输出星期几。
(1)如果有星期几的第一个字母相同,则继续输入第二个字母。
(2)循环操作,直到输入q或Q则退出程序。
def yue1(yy):
if yy in ['m','M']:
print("星期一")
elif yy in ['w','W']:
print("星期三")
elif yy in ['f','F']:
print("星期五")
def yue2(yy):
yy2=input('请输入第二个字母:')
if yy in ['t','T']:
if yy2=='u' or yy2=='U':
print('星期二')
elif yy2 in ['h','H']:
print('星期四')
elif yy2 in ['q','Q']:
return True
else :
print('没有相匹配的,第二个字母就不匹配')
yue2(yy)
else:
if yy2=='u' or yy2=='U':
print('星期日')
elif yy2 in ['a','A']:
print('星期六')
elif yy2 in ['q','Q']:
return True
else :
print('没有相匹配的,第二个字母就不匹配')
yue2(yy)
def fun():
while(True):
yy=input("请输入第一个字母:")
if yy in ['q','Q']:
print('退出成功!')
break
elif yy in ['m','M','w','W','f','F',]:
yue1(yy)
elif yy in ['t','T','s','S'] :
if yue2(yy):
print('退出成功!')
break
else :
print('第一个字母不匹配')
#调用该主体函数
fun()
3. 输入一个数n,生成n个1到100之间的随机整数,写入文件中。(每个数一行)
import random
n= int(input("请输入一个1到100间的数:"))
rnd = [0]*n
for i in range(n):
rnd[i] = random.randint(0, 100)
print(rnd)
4.从文件中读取数据(第3题中的文件),使用归并排序或快速排序进行排序,然后写入另外一个文件中
def quick_sort(array, start, end):
if start >= end:
return
mid_data, left, right = array[start], start, end
while left < right:
while array[right] >= mid_data and left < right:
right -= 1
array[left] = array[right]
while array[left] < mid_data and left < right:
left += 1
array[right] = array[left]
array[left] = mid_data
quick_sort(array, start, left-1)
quick_sort(array, left+1, end)
df = open("E:\学习\代码\Python_homework\data.txt")
list1 = []
for i in df:
list1.append([int(x) for x in i.split()])
quick_sort(list1, 1, len(list1)-1)
f = open("E:\学习\代码\Python_homework\data1.txt",'a+')
for i in range(1, len(list1)):
f.write('{}'.format(list1[i]))
f.write('\n')
f.close()
5.把如下数据写入文件,然后从文件中读取数据,绘制两行数据对应的图
from matplotlib import pyplot as plt
x=[0, 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]
y=[20, 21, 23, 28, 36, 45, 57, 69, 85, 102, 120, 138, 161, 190, 216, 246, 276, 310, 343, 381, 418, 459, 505, 549, 596, 645, 697, 750, 805, 862]
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(x,y)
plt.show()
6.接着第5题。上述x和y其实是在y=20+x2函数上的一个近似。根据x的值和函数y=20+x2,计算y_new,算出y_new和y的差,记为delta_y。
绘制x和delt_y的点图,并计算y的方差。有关方差的计算参阅数学资料。
from matplotlib import pyplot as plt
import numpy as np
x=[0, 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]
y=[20, 21, 23, 28, 36, 45, 57, 69, 85, 102, 120, 138, 161, 190, 216, 246, 276, 310, 343, 381, 418, 459, 505, 549, 596, 645, 697, 750, 805, 862]
x=np.array(x)
y=np.array(y)
y_new=x*x+20
delta_y=y_new-y
#求y的方差
Dy=np.sum((y-np.mean(y))*(y-np.mean(y)))/(y.shape[0]-1)
print(f"y的均值为{np.round(np.mean(y),3)},方差为",np.round(Dy,3))
#求delta_y的方差
DDelta_y=np.sum((delta_y-np.mean(delta_y))*(delta_y-np.mean(delta_y)))/(delta_y.shape[0]-1)
print(f"delta_y的均值为{np.round(np.mean(delta_y),3)},方差为",np.round(DDelta_y,3))
#绘制散点图
#设置大小
plt.figure(figsize=(20,8),dpi=80)
#散点图
plt.scatter(x,delta_y)
#展示
plt.show()