三月十一日
1.3
print('《凉州词》'.center(20))
print('{:>20s}'.format('王之涣'))
print('黄河远上白云间,一片孤城万仞山。')
print('羌笛何须怨杨柳,春风不度玉门关。')
print('单于北望拂云堆,杀马登坛祭几回。')
print('汉家天子今神武,不肯和亲归去来。')
2.1
# 实战1 输出人生四大喜事
print(" ☺人生四大喜事☺")
print("久旱逢甘雨---第一喜")
print("他乡遇故知---第二喜")
print("洞房花烛夜---第三喜")
print("金榜题名时---第四喜")
2.2
# 模拟成语填空游戏
print(" 拒")
print(" 人")
print(" 千")
print("忙 偷闲")
blank=input("请输入所缺字:")
print(" 拒")
print(" 人")
print(" 千")
print(f"忙{blank}偷闲")
2.3
# 实战2-3 输入体重,身高和年龄,根据公式计算正常女性一天的基础代谢。(计算公式为:女性的基础代谢=655+(9.6×体重kg)+(1.7×身高cm)-(4.7×年龄))。
weight = float(input("请输入体重(kg):"))
height = float(input("请输入身高(cm):"))
age = int(input("请输入年龄:"))
result = 655 + (9.6 * weight) + (1.7 * height) - (4.7 * age)
print("基础代谢为:" + str(result) + "大卡.")
# 实战2-4 模拟打印超市购物小票。输入商品名称、单价、数量,计算总价。用户输入整钱,实现找零和抹零的功能,最后打印购物小票。(假设只购买一件物品)
print("Python超市收银系统")
product_name = input("商品名称:")
price = float(input("商品单价:"))
number = float(input("数量:"))
pay_user = round(price * number, 2)
print("应付金额:" + str(pay_user))
pay = float(input("实收:"))
print("Python超市购物小票")
print("商品名称\t单价\t\t数量")
print(str(product_name) + "\t\t" + str(price) + "\t" + str(number))
print("应付:" + str(pay_user))
print("实收:" + str(pay))
print("找零" + str(round(pay - pay_user, 1)))
# 实战2-5 输入《中国必胜》藏头诗,打印藏头诗句。输入和输出效果如下:
# 中庭寒月白如霜,
# 国门卿相旧山庄。
# 必拟一身生羽翼,
# 胜景饱于闲采拾。
print("请输入《中国必胜》藏头诗:")
Line1 = input( )
Line2 = input( )
Line3 = input( )
Line4 = input( )
print("《中国必胜》藏头句为:")
print(Line1[0])
print(Line2[0])
print(Line3[0])
print(Line4[0])
# 实战2-6 输入直角三角形的底和高,用勾股定理计算斜边长,并打印输出该三角形的三条边的长。(提示:需要用到math模块中的sqrt()函数求平方根)
import math
bottom = float(input("底边:"))
height = float(input("高:"))
hypotenuse = math.sqrt(bottom ** 2 + height ** 2)
print("斜边:", end='')
print("%.2f" % hypotenuse)
3.1
# 实战2 判断闰年
year = int(input("请输入年份:"))
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print(str(year) + "是闰年!")
else:
print(str(year) + "不是闰年!")
3.2
import math
a=int(input("请输入三角形的第一条边长:"))
b=int(input("请输入三角形的第二条边长:"))
c=int(input("请输入三角形的第三条边长:"))
if a+b > c and a+c>b and b+c >a :
print("三角形的周长:{}".format(a+b+c))
#三角形面积,已知三边利用海伦公式(p=(a+b+c)/2)
#S=sqrt[p(p-a)(p-b)(p-c)]
p=(a+b+c)/2
area=math.sqrt(p*(p-a)*(p-b)*(p-c))
print("三角形的面积:{}".format(area))
else:
print("输入的边长不能构成三角形,请重新输入")
3.3
# 某小学的学优生评定标准:语文、数学、英语和科学四门课程的总分不低于380分,且每科成绩不低于95分,编程判断某位同学是否为学优生。
language, math, english, science = input("请输入语文,数学,英语和科学百分制成绩:").split(" ")
if int(
language + math + english + science) >= 380 and int(language) >= 95 and int(math) >= 95 and int(
english) >= 95 and int(science) >= 95:
print("该生是学优生.")
else:
print("该生不是学优生.")
3.4
'''(简易版个税计算器)某公司员工小王每月税前工资为salary,五险一金等扣除为insurance,其他专项扣除为other,请编程计算小王每月应缴纳税额和实发工资。
注:应缴纳税额=税前收入-5000(起征点)-五险一金扣除-其他扣除
个人所得税=应缴纳税额适用税率-速算扣除数
实发工资=税前工资-个人所得税-五险一金
'''
salary = float(input('本月收入:'))
insurance = float(input('五险一金扣除:'))
other = float(input('其他专项扣除:'))
diff = salary - insurance - other - 5000
if diff <= 0:
rate, deduction = 0, 0 # 分别表示税率和速算扣除
elif diff < 3000:
rate, deduction = 0.03, 0
elif diff < 12000:
rate, deduction = 0.1, 210
elif diff < 25000:
rate, deduction = 0.2, 1410
elif diff < 35000:
rate, deduction = 0.25, 2660
elif diff < 55000:
rate, deduction = 0.3, 4410
elif diff < 80000:
rate, deduction = 0.35, 7160
else:
rate, deduction = 0.45, 15160
tax = abs(diff * rate - deduction)
print('个人所得税: ¥%.2f元' % tax)
print('实际到手收入:¥%.2f元' % (salary - tax - insurance))
3.5
'''幸运52猜数游戏(模仿幸运52中猜价钱游戏,编写程序,计算机随机产生一个1~100正整数,让用户猜,
并提醒用户猜大了还是猜小了,直到用户猜对为止,计算用户猜对一个数所用的秒数。)
'''
import random
import time
n = random.randint(1, 100)
begin_time = time.time( )
x = int(input("请输入一个1~100的整数:"))
while x != n:
if x > n:
print("大了!")
else:
print("小了!")
x = int(input("请输入一个1~100的整数:"))
end_time = time.time( )
print("用时为" + str(end_time - begin_time))
3.6
# 实战3-6:求出所有的水仙花数。
for i in range(100, 1000):
x1 = i // 100
x2 = (i % 100) // 10
x3 = i % 10
if (x1 ** 3 + x2 ** 3 + x3 ** 3 == i):
print(i, end="\t")
3.7
# 模拟打印超市购物小票升级版。输入商品名称、价格、数量,算出应付金额。用户输入整钱,实现找零和抹零的功能,最后打印购物小票。
print("Python超市收银系统")
num = int(input("商品个数:"))
sum, product_name, product_price, product_number = 0.0, [], [], []
print("商品名称\t单价\t\t数量")
for i in range(0, num):
name,price,number=input().split(" ")
product_name.append(name)
product_price.append(float(price))
product_number.append(float(number))
#price+=input().split(" ")
#number+=input()
sum += round(float(product_price[i]) * float(product_number[i]), 2)
print("应付金额:" + str(sum))
pay = float(input("实收:"))
print("Python超市购物小票\n共购买%d件商品" % num)
print("商品名称\t单价\t\t数量")
for i in range(0, num):
print(product_name[i] + "\t\t" + str(product_price[i]) + "\t" + str(product_number[i]))
print("应付:" + str(sum))
print("实收:" + str(pay))
print("找零" + str(round(pay - sum, 1)))
3.8
# 有一个分数数列 ,编程计算这个数列的前20项之和。
nume, deno, sum = 2, 1, 0.0 # 分子,分母,和
for i in range(1, 21):
sum = sum + nume / deno # 和
t = deno # 暂存前一项的分母
deno = nume # 后一项的分母为前一项的分子
nume = t + nume # 后一项的分子为前一项的分母+分子
print("sum=%.2f" % sum)
3.9
# 求所有的四位“回文数”。(“回文数”是一种特殊数字,就是说一个数字从左边读和从右边读的结果是一模一样的。)
count = 0
for i in range(1000, 10000):
fourth = i // 1000 # 千位
third = i % 1000 // 100 # 百位
second = i % 100 // 10 # 十位
first = i % 10 # 个位
if fourth == first and third == second:
count = count + 1
print(i, end="\t")
if count % 10 == 0:
print( )
3.10
'''
编程实现:打印出1~ 1000 之间包含3的数字。如果3是连在一起的(如233 )则在数字前加上&;
如果这个数字是质数则在数字后加上*,(例 3,13*,23*,&33,43*……&233*…)
'''
#list0=[]
a='33'
for i in range(3,1000,10):
if i%3 ==0:
j = str(i)
if a in j:
print('&', j,'*')
else:
print(i)
else:
print(i, '*')
4.1
list1=[]
tuple1=(0,1,2,3,4,5,6,7,8,9)
set1=set()
for i in range(10):
list1.append(i)
set1.add(i)
print(list1)
print(tuple1)
print(set1)
4.2
list1=[]
tuple1=(0,1,2,3,4,5,6,7,8,9)
set1=set()
for i in range(10):
list1.append(i)
set1.add(i)
list2=list1[1,3,5]
tuple2=tuple1[1,3,5]
4.3
#【训练4.3】已知某数据为“abcdedcba”,利用所学的知识输出该数据中的元素(不输出重复元素)。
a="abcdedcba"
seta=set(a)
print(seta)
4.4
#【训练4.4】将自己的学号、姓名、性别信息定义为一个字典,并利用讲过的方法添加自己的身高信息到字典中,然后输出自己的这四个信息。
dict1={"name":"zhangsan","ID":"209003031","sex":"Male"}
dict1["height"]=177
print(dict1)
4.5
#【训练4.5】定义一个包含10个同学考试成绩的元组,然后运用讲过的相关函数输出10个同学中的最高分、最低分及平均分。
tuple1=(77,84,67,90,89,56,70,80,93,73)
max_score=max(tuple1)
min_score=min(tuple1)
ave_socre=sum(tuple1)/len(tuple1)
print("最高分:",max_score,"最低分:",min_score,"平均分:",ave_socre)
4.6
#该实例实现功能:根据诗名猜作者
import random
#首先定义一个字典,字典中的元素以诗名:作者格式存储
poet_writer={'锄禾':'李绅','九月九日忆山东兄弟':'王维','咏鹅':'骆宾王','秋浦歌':'李白','竹石':'郑燮','石灰吟':'于谦','示儿':'陆游',"静夜思":"李白"}
writers=set(list(poet_writer.values()))
poet=list(poet_writer.keys())
p=random.choice(poet)
print(p,'的作者是谁')
#显示4个选项
#四个选项中有一个是正确答案,另外三个选项需要从备选集合中任选三个
right_answer=poet_writer[p]
writers.remove(right_answer)
#从中选择三个
mul=list(writers)
random.shuffle(mul)
items=mul[0:3]
items.append(right_answer)
random.shuffle(items)
head=["A","B","C","D"]
new_dic=dict(zip(head,items))
for key,value in new_dic.items():
print(key,value)
answer=input('enter your answer:')
if new_dic[answer]==poet_writer[p]:
print("correct!")
else:
print("wrong")
5.1
#【训练5.1】 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
def is_Prime(number):
if number == 1: # 1不是质数
return 0
for i in range(2,number): # 把2到number之间的数全部做一遍取余,看是否能整除
if number % i == 0:
return 0
return 1 # 是质数
num=eval(input())
lst = [x for x in range(1,num+1) if is_Prime(x)]
# 计算满足要求的组的个数
count = 0
for i in lst:
if num - i in lst and num - i <= i:
count += 1
print(i,"+",num-i,"=",num)
print(count)
5.2
#【训练5.2】 编写函数change(str),其功能是对参数str进行大小写互换,即将字符串中的大写字母转为小写字母,小写字母转换为大写字母。
def change(f):
f1 = eval(f[:-2])
f2=0
if 'lb'==f[-2:]:
f2=0.453*f1
elif 'kg'==f[-2:]:
f2=2.204*f1
return f2
x=input("enter :")
y=change(x)
print(y)
5.3
#【训练5.3】编写函数digit(num,k),其功能是:求整数num的第k位的值。
def digit(num,k):
for i in range(k):
knum=num%10
num=int(num/10)
return knum
print(digit(598234,4))
5.4
#【训练5.4】编写递归函数fibo(n),其功能是:求第n个斐波那契数列的值,进而实现将前20个斐波那契数列输出。
def fibo(n):
if n <= 2:
''' 数列前两个数都是1 '''
v = 1
return v # 返回结果,并结束函数
v = fibo(n - 1) + fibo(n - 2) # 由数据的规律可知,第三个数的结果都是前两个数之和,所以进行递归叠加
return v # 返回结果,并结束函数
for i in range(1,21):
print(i,":",fibo(i))
5.5
#【训练5.5】编写一个函数cacluate, 可以接收任意多个数, 返回的是一个元组。元组的第一个值为所有参数的平均值, 第二个值是小于平均值的个数。
def calculate(*args):
sum=0
for i in args:
sum=sum+i
ave=sum/len(args)
counts=0
for i in args:
if i<ave:
counts=counts+1
return ave,counts
ave,counts=calculate(89,20,80,54,67,90,77)
print(ave,counts)
5.6
# 【训练5.6】模拟轮盘抽奖游戏.轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的,
# 如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0.3)之间,代表2等奖,如果范围在[0, 1.0)之间,代表3等奖.
import random
rewardDict = {
'一等奖': (0, 0.08),
'二等奖': (0.08, 0.3),
'三等奖': (0.3, 1)
}
def rewardFun(): # 用户的得奖等级
# 生成0~1之间的随机数
number = random.random()
# 该循环用来判断随机转盘是几等奖
for k, v in rewardDict.items():
if v[0] <= number < v[1]:
return k
res = rewardFun()
print(res)
5.7
# 【训练5.7】有一段英文: What is a function in Python? In Python, function is a group of related statements that perform
# a specific task. Functions help break our program into smaller and modular chunks. As our program grows larger and
# larger, functions make it more organized and manageable. Furthermore, it avoids repetition and makes code reusable.
# A function definition consists of following components. Keyword def marks the start of function header.
# A function name to uniquely identify it. Function naming follows the same rules of writing identifiers in Python.
# Parameters (arguments) through which we pass values to a function. They are optional. A colon (:) to mark the end of
# function header. Optional documentation string (docstring) to describe what the function does. One or more valid Python
# statements that make up the function body. Statements must have same indentation level (usually 4 spaces). An optional
# return statement to return a value from the function.
# 任务: 1.请统计出该段英文有多少个单词,每个单词出现的次数。
# 2.如果不算of、a 、the这三个单词,给出出现频率最高的10个单词,并给出他们出现的次数。
def getText(text):
text=text.lower()
for ch in ",.;?-:\'":
text=text.replace(ch," ")
return text
def wordCount(text,topn):
words=text.split()
counts={}
for word in words:
counts[word]=counts.get(word,0)+1
excludes={"of","a","the"}
for word in excludes:
del(counts[word])
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
return items[:topn]
text='''What is a function in Python? In Python, function is a group of related statements that perform
a specific task. Functions help break our program into smaller and modular chunks. As our program grows larger and
larger, functions make it more organized and manageable. Furthermore, it avoids repetition and makes code reusable.
A function definition consists of following components. Keyword def marks the start of function header.
A function name to uniquely identify it. Function naming follows the same rules of writing identifiers in Python.
Parameters (arguments) through which we pass values to a function. They are optional. A colon (:) to mark the end of
function header. Optional documentation string (docstring) to describe what the function does. One or more valid Python
statements that make up the function body. Statements must have same indentation level (usually 4 spaces). An optional
return statement to return a value from the function.'''
text=getText(text)
for word,count in wordCount(text,20):
print(word," ",count)
5.8
# 【训练5.8】英镑(lb)和千克(kg)的转换。利用函数实现英镑(lb)和千克(kg)的转换。用户可以输入千克,也可以输入英镑,
# 函数将根据用户的输入转换成英镑或者千克。
def change(f):
f1 = eval(f[:-2])
f2=0
if 'lb'==f[-2:-1]:
f2=0.453*f1
elif 'kg'==f[-2:-1]:
f2=2.204*f1
return f2
x=input("enter :")
y=change(x)
print(y)
5.9
#【训练5.9】一个数如果恰好等于它的真因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
def allFactor(n):
if n == 0: return [0]
if n == 1: return [1]
rlist = []
for i in range(1,n+1):
if n%i == 0:
rlist.append(i)
rlist=rlist[:-1]
return rlist
def display(n,s_list):
print(n,"=",end='')
for i in range(len(s_list)-1):
print(s_list[i],"+",end='')
print(s_list[i])
for n in range(2,1000):
rlist=allFactor(n)
if(n==sum(rlist)):
display(n,rlist)
5.10
#【训练5.10】利用递归函数调用方式,将用户所输入的字符串,以相反顺序打印出来。
string = input("请输入一个字符串 :")
def f(x):
if x == -1: #当变量的长度是-1时,返回
return ''
else: #否则返回字符串的位置向后移1位,直到变量的长度为-1
return string[x] + f(x-1)
print (f(len(string)- 1))
test.
def func1(x,y):
x1=x
y1=y
print("in func1, x1:{},y1:{},x:{},y:{}".format(x1,y1,x,y))
func2()#在函数func1中调用函数func2
def func2():
# x1=10
# y1=20
print("in func2, x1:{},y1:{}".format(x1,y1))
func1(2,3)
6.1
class Date(object):
def __init__(self,year,month,day):
self.__year=year
self.__month=month
self.__day=day
def getYear(self):
return self.__year
def getMonth(self):
return self.__month
def getDay(self):
return self.__day
def setYear(self,year):
self.__year=year
def setMonth(self, month):
self.__month = month
def setDay(self, day):
self.__day = day
def show(self):
print(self.__year,"/",self.__month,"/",self.__day)
#测试代码
if __name__ == '__main__':
d=Date(2020,12,18)
d.show()
d.setYear(2021)
d.setMonth(1)
d.setDay(1)
d.show()
6.2
#导入训练6-1中定义的Date类
import sys
import os
sys.path.append(os.getcwd())
from Date import Date
#定义CCPM类
class CCPM(object):
def __init__(self,name,sex,id,joinday,partyfund):
self.__name=name
self.__sex=sex
self.__joinday=joinday
self.__id=id
self.__partyfund=partyfund
def getName(self):
return self.__name
def getSex(self):
return self.__sex
def getId(self):
return self.__id
def getJoinday(self):
return self.__joinday
def getPartyFund(self):
return self.__partyfund
def setName(self,name):
self.__name=name
def setSex(self,sex):
self.__sex=sex
def setId(self,id):
self.__id=id
def setJoinday(self,day):
self.joinday=day
def setPartyfund(self,partyfund):
self.__partyfund=partyfund
def show(self):
print("姓名:"+self.__name)
print("性别:"+self.__sex)
print("身份证号:"+self.__id)
print("入党时间:",end=" ")
self.__joinday.show()
print("党费/月:",self.__partyfund,"元")
#测试代码
if __name__ == '__main__':
joinday=Date(2020,12,18)
ccpm=CCPM("zhang","男","320311199001011111",joinday,100)
ccpm.show()
6.3
#Person类的定义
class Person(object):
def __init__(self,name,sex,age):
self.__name=name
self.__sex=sex
self.__age=age
def setName(self,name):
self.__name=name
def setSex(self,sex):
self.__sex=sex
def setAge(self,age):
self.__age=age
def getName(self):
return self.__name
def getSex(self):
return self.__sex
def getAge(self):
return self.__age
def display(self):
print("姓名:",self.__name)
print("性别:",self.__sex)
print("年龄:",self.__age)
#Student 类的定义
class Student(Person):
def __init__(self,name,sex,age,number,score):
super(Student,self).__init__(name,sex,age)
self.__number=number
self.__score=score
def setNumber(self,number):
self.__number=number
def setScore(self,score):
self.__score=score
def getNumber(self):
return self.__number
def getScore(self):
return self.__score
def display(self):
super(Student,self).display()
print("学号:",self.__number)
print("成绩:",self.__score)
#Teacher类的定义
class Teacher(Person):
def __init__(self,name,sex,age,department,number,salary):
super(Teacher,self).__init__(name,sex,age)
self.__department=department
self.__number=number
self.__salary=salary
def setDepartment(self,department):
self.__department=department
def setNumber(self,number):
self.__number=number
def setSalary(self,salary):
self.__salary=salary
def getDepartmen(self):
return self.__department
def getNumber(self):
return self.__number
def getSalary(self):
return self.__salary
def display(self):
super(Teacher,self).display()
print("学院:",self.__department)
print("工号:",self.__number)
print("工资:",self.__salary)
s=Student("张三","男",18,"20900001",90)
s.display()
t=Teacher("周老师","女",45,"计算机学院","199098",8000)
print()
t.display()
6.4
# 请你建立一个分数类Rational,
# 使之具有如下功能:
# 能防止分母为“0”,
# 当分数中不是最简形式时,进行约分以及避免分母为负数。
# 用重载运算符完成分数的加、减、乘、除等四则运算和大小的比较运算。
class Rational(object):
def __init__(self,numerator,denominator):
self.num=numerator #分子
if denominator==0:
print("分母不能为0")
else:
self.deno=denominator
self.reduceFraction()
def Gcd(self):
a=self.num
b=self.deno
s = a * b
while a % b != 0:
a, b = b, (a % b)
return b
def reduceFraction(self):
gcd=self.Gcd()
self.num //= gcd
self.deno//= gcd
#加法运算
def __add__(self, other): # 两个分数相加,返回一个新的分数
return Rational(self.num*other.deno+other.num*self.deno,self.deno*other.deno)
#减法运算
def __sub__(self,other):
return Rational(self.num * other.deno- other.num * self.deno, self.deno* other.deno)
#乘法运算
def __mul__(self,other):
return Rational(self.num*other.num,self.deno*other.deno)
#除法运算
def __truediv__(self,other):
return Rational(self.num * other.deno, self.deno * other.num)
#小于运算
def __lt__(self,other):
deno=self.deno*other.deno
num1=self.num*other.deno
num2=other.num*self.deno
if num1<num2:
return True
else:
return False
# 小于等于运算
def __l__(self, other):
deno = self.deno * other.deno
num1 = self.num * other.deno
num2 = other.num * self.deno
if num1 <= num2:
return True
else:
return False
#大于运算
def __t__(self,other):
deno=self.deno*other.deno
num1=self.num*other.deno
num2=other.num*self.deno
if num1>num2:
return True
else:
return False
#大于等于运算
def __ge__(self,other):
deno=self.deno*other.deno
num1=self.num*other.deno
num2=other.num*self.deno
if num1>=num2:
return True
else:
return False
def __str__(self):
if self.deno!=1:
return "{}/{}".format(self.num, self.deno)
else:
return "{}".format(self.num)
#测试代码
r1=Rational(3,4)
r2=Rational(1,2)
print('{}+{}={}'.format(r1,r2,r1+r2))
print('{}-{}={}'.format(r1,r2,r1-r2))
print('{}*{}={}'.format(r1,r2,r1*r2))
print('{}/{}={}'.format(r1,r2,r1/r2))
print('{}<{}={}'.format(r1,r2,r1<r2))
print('{}<={}={}'.format(r1,r2,r1<=r2))
print('{}>{}={}'.format(r1,r2,r1>r2))
print('{}>={}={}'.format(r1,r2,r1>=r2))
6.5
from math import sqrt
from math import pi
class Triangle(object):
def __init__(self,a,b,c):
if(a+b>c and a+c>b and b+c>a):
self.a=a
self.b=b
self.c=c
else:
print("{},{},{}不能构成三角形!".format(a,b,c))
def area(self):
s=(self.a+self.b+self.c)/2
return sqrt(s*(s-self.a)*(s-self.b)*(s-self.c))
def circumference(self):
return self.a+self.b+self.c
class Square(object):
def __init__(self,side):
self.side=side
def area(self):
return self.side*self.side
def circumference(self):
return 4*self.side
class Circle(object):
def __init__(self, radius):
self.radius= radius
def area(self):
return pi*self.radius * self.radius
def circumference(self):
return 2*pi*self.radius
#测试代码
tri=Triangle(1,1,1)
print("%.2f"%tri.area())
print(tri.circumference())
s=Square(1)
print("%.2f"%s.area())
print(s.circumference())
c=Circle(1)
print("%.2f"%c.area())
print("%.2f"%c.circumference())
7.1
count = 0
for i in range(1000, 10000):
fourth = i // 1000 # 千位
third = i % 1000 // 100 # 百位
second = i % 100 // 10 # 十位
first = i % 10 # 个位
if fourth == first and third == second:
count = count + 1
with open("palindrome.txt", "a") as f:
f.write(str(i)+'\t')
if count % 10 == 0:
f.write('\n')
7.1(2)
count = 0
f=open("palindrome.txt", "a")
for i in range(1000, 10000):
fourth = i // 1000 # 千位
third = i % 1000 // 100 # 百位
second = i % 100 // 10 # 十位
first = i % 10 # 个位
if fourth == first and third == second:
count = count + 1
f.write(str(i)+'\t')
if count % 10 == 0:
f.write('\n')
f.close()
7.2
#从键盘输入n个学生信息,包括学号、姓名、成绩。用struct方式保存到文件students.bin中。
#然后再将所有学生信息读取出来,并按照成绩从高到低排序,输出到屏幕上。
import struct
def writeToBinFile(filename):
n=int(input("请输入学生个数:"))
#输入n个学生的信息,并写入到二进制文件student.bin
f = open(filename, "wb")
for i in range(1,n+1):
y=input("请输入第"+str(i)+"个学生的学号 姓名 成绩 (以空格分隔)\n").split()
w=list(map(str,y))
id=w[0]
name = w[1]
score=float(w[2])
#编码
id=id.encode()
name=name.encode()
student = struct.pack('4s10sf', id, name, score) # 按格式'4s10sf',将id,name,score打包成字节串
f.write(student) # 把字节串student写入二进制文件
print("学生信息已经写入二进制文件!")
f.close()
return n
#从二进制文件filename中读取数据n个数据
def readFromBinFile(filename,n):
#从二进制文件student.bin中读取出学生信息,并显示在屏幕上
f=open(filename,"rb")
list=[]
for i in range(0,n):
size=struct.calcsize('4s10sf')
stu=f.read(size) #读取size个字节
stu=struct.unpack('4s10sf',stu) #解析字节串,解析的结果是一个元组
#print("从二进制文件读取的数据为:",stu) #打印元组,可以看出id,name保持为字节串
id,name,score=stu #对元组进行解包,赋给对应的变量id name score
#用decode方法对id、name、score进行解码,将字节串转换成字符串
id = id.decode().strip('\x00')
name = name.decode().strip('\x00')
list1=[id,name,score]
list.insert(i,list1)
f.close()
return list
#测试代码
if __name__ == '__main__':
student=[]
n=writeToBinFile("student.bin")
student=readFromBinFile("student.bin",n)
print("学生的信息为:")
for i in student:
print(i)
s= sorted(student,key = lambda x:x[2],reverse=True)
print("学生信息按成绩从高到低排序后的结果为:")
for i in s:
print(i)
7.3
import csv
#将记录写入csv文件
def writeToCsvFile(filename):
with open(filename,'w',newline="") as f:
writer=csv.writer(f)
writer.writerow(['党组织','平均参与度','人均积分'])
n=int(input("要存储的记录个数:"))
for i in range(1,n+1):
y = input("请输入第" + str(i) + "个记录的党组织 平均参与度 人均积分 (以空格分隔)\n").split()
w = list(map(str, y))
党组织 = w[0]
平均参与度 = w[1]
人均积分 = int(w[2])
writer.writerow([党组织,平均参与度,人均积分])
#从csv文件中读取数据并进行查询,返回查询结果
def queryFromCsvFile(filename,党组织):
list=[]
with open(filename,'r') as f:
reader =csv.reader(f)
for row in reader:
if row[0]==党组织:
list.append(row[0])
list.append(row[1])
list.append(row[2])
return list
#测试代码
if __name__ == '__main__':
filename="学习强国学习平台使用情况.csv"
党组织="商学院党总支"
#writeToCsvFile(filename)
list=queryFromCsvFile(filename,党组织)
if len(list):
print(list[0]+"的平均参与度 人均积分")
print(list[1]," ",int(list[2]))
else:
print("没有查询到"+党组织+"的数据!")
7.4
#使用tarfile模块实现将指定目录下的文件压缩和解压缩。
import tarfile
import os
def tar_data(srcpath, targetpath):
tfobj = tarfile.TarFile(targetpath, "w")
filelist = os.listdir(srcpath)
for filename in filelist:
fullpath = os.path.join(srcpath, filename)
tfobj.add(fullpath)
tfobj.close()
def untar_data(srcpath, targetpath):
if tarfile.is_tarfile(srcpath):
tfobj = tarfile.TarFile(srcpath)
tfobj.extractall(targetpath)
tfobj.close()
print("文件已经解压完毕!")
else:
print("不是压缩文件!")
if __name__ == '__main__':
tar_data("f:\\电子发票","f:\\电子发票.tar")
untar_data("f:\\电子发票.tar", "d:\\")
8.1
try:
a=int(input("请输入整数a:"))
b=int(input("请输入整数b:"))
print(a+b)
except(ValueError) as e:
print(e)
else:
print("计算正确!")
8.2
try:
a=int(input("请输入整数a:"))
b=int(input("请输入整数b:"))
print(a+c)
except(NameError) as e:
print(e)
8.3
# 创建一个自定义异常类TriangleError类,
# 如果三角形的三条边不满足任意两边之和大于第三边,
# 则抛出TriangleError类的对象。
import math
class TriangleError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
print("请输入三角形的三条边:")
a = eval(input())
b = eval(input())
c = eval(input())
try:
if a + b <= c or a + c <= b or b + c <= a:
raise TriangleError("注意:三角形任意两边之和必须大于第三边")
s = (a + b + c) / 2
area = math.sqrt(s * (s - a) * (s - b) * (s - c))
print(area)
except TriangleError as e:
print(e)
over!!!!