数据库例题(一)
创建如下数据表
CREATE TABLE student2(
id INT(10)PRIMARY key ,
name VARCHAR(20)NOT NULL,
sex VARCHAR(4),
birth YEAR,
department VARCHAR(20)NOT NULL,
address VARCHAR(50)
)ENGINE=InnoDB DEFAULT CHARSET=GB2312;
CREATE TABLE score2(
id INT(10)PRIMARY key AUTO_INCREMENT,
stu_id INT(10)NOT NULL,
c_name VARCHAR(20),
grade INT(10),
UNIQUE KEY id (id)
)ENGINE=InnoDB DEFAULT CHARSET=GB2312;
INSERT INTO student2 (id,name,sex,birth,department,address) VALUES
(901,'张老大','男',1985,'计算机系','北京市海淀区'),
(902,'张老二','男',1986,'中文系','北京市昌平区'),
(903,'张三','女',1990,'中文系','湖南省永州市'),
(904,'李四','男',1990,'英语系','辽宁省阜新市'),
(905,'王五','女',1991,'英语系','福建省厦门市'),
(906,'王六','男',1988,'计算机系','湖南省衡阳市');
INSERT INTO score2 (id,stu_id,c_name,grade) VALUES
(NULL,901,'计算机',98),
(NULL,901,'英语',80),
(NULL,902,'计算机',65),
(NULL,902,'中文',88),
(NULL,903,'中文',95),
(NULL,904,'计算机',70),
(NULL,904,'英语',92),
(NULL,905,'英语',94),
(NULL,906,'计算机',90),
(NULL,906,'英语',85);
4.查询student表的第2条到4条记录
SELECT * FROM student2 LIMIT 1,3;
5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
SELECT id 学号, name 姓名, department 院系 FROM student2;
7.从student表中查询年龄18~22岁的学生信息
SELECT * FROM student2 WHERE 2010-birth BETWEEN 18 AND 22;
8.从student表中查询每个院系有多少人
SELECT department, count(id) FROM student2 GROUP BY department;
9.从score表中查询每个科目的最高分
SELECT c_name,max(grade) FROM score2 GROUP BY c_name;
10.查询李四的考试科目(c_name)和考试成绩(grade)
SELECT c_name,grade FROM score2 WHERE stu_id=(
SELECT id FROM student2 WHERE name='李四' );
11.用连接的方式查询所有学生的信息和考试信息
SELECT student2.id,student2.name,student2.sex,student2.birth,student2.department, student2.address,score2.c_name,score2.grade
FROM student2,score2 WHERE student2.id=score2.stu_id;
12.计算每个学生的总成绩
SELECT stu_id,sum(grade) FROM score2 GROUP BY stu_id
13.计算每个考试科目的平均成绩
SELECT c_name,AVG(grade) FROM score2 GROUP BY c_name
14.查询计算机成绩低于95的学生信息
SELECT * FROM score2 WHERE c_name='计算机' AND grade<95;
15.查询同时参加计算机和英语考试的学生的信息
SELECT * FROM student2 WHERE id=ANY(
SELECT stu_id FROM score2 WHERE stu_id in
(SELECT stu_id FROM score2 WHERE c_name='计算机') AND c_name='英语');
16.将计算机考试成绩按从高到低进行排序
SELECT * FROM score2 WHERE c_name='计算机' ORDER BY grade DESC
17.从student表和score表中查询出学生的学号,然后合并查询结果
SELECT id FROM student2 UNION all SELECT stu_id FROM score2 ;
18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
SELECT student2.name,student2.department,score2.c_name,score2.grade
FROM student2,score2 WHERE student2.id=score2.stu_id AND
( student2.name LIKE '张%' OR student2.name LIKE '王%')
19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
SELECT student2.name,(2010-student2.birth) AS 年龄,student2.department,score2.c_name,score2.grade
FROM student2,score2 WHERE student2.id=score2.stu_id AND
(student2.address LIKE '湖南%')
数据库例题(二)
创建如下数据表
#建学生信息表student
-- create table student(
-- sno varchar(20) not null primary key,
-- sname varchar(20) not null,
-- ssex varchar(20) not null,
-- sbirthday datetime,
-- class varchar(20)
-- );
-- -- #建立教师表
-- create table teacher
-- (
-- tno varchar(20) not null primary key,
-- tname varchar(20) not null,
-- tsex varchar(20) not null,
-- tbirthday datetime,
-- prof varchar(20),
-- depart varchar(20) not null
-- );
-- -- #建立课程表course
-- create table course
-- (
-- cno varchar(20) not null primary key,
-- cname varchar(20) not null,
-- tno varchar(20) not null,
-- foreign key(tno) references teacher(tno)
-- );
#建立成绩表
-- CREATE TABLE `score` (
-- sno varchar(20) NOT NULL,
-- cno varchar(20) NOT NULL,
-- degree decimal(10,0) DEFAULT NULL,
-- PRIMARY KEY (`sno`,`cno`),
-- FOREIGN KEY (`sno`) REFERENCES `student` (`sno`),
-- FOREIGN KEY (`cno`) REFERENCES `course` (`cno`)
-- )
-- -- #添加学生信息
-- insert into student values('108','曾华','男','1977-09-01','95033');
-- insert into student values('105','匡明','男','1975-10-02','95031');
-- insert into student values('107','王丽','女','1976-01-23','95033');
-- insert into student values('101','李军','男','1976-02-20','95033');
-- insert into student values('109','王芳','女','1975-02-10','95031');
-- insert into student values('103','陆君','男','1974-06-03','95031');
-- -- #添加教师表
-- insert into teacher values('804','李诚','男','1958-12-02','副教授','计算机系');
-- insert into teacher values('856','张旭','男','1969-03-12','讲师','电子工程系');
-- insert into teacher values('825','王萍','女','1972-05-05','助教','计算机系');
-- insert into teacher values('831','刘冰','女','1977-08-14','助教','电子工程系');
-- -- #添加课程表
-- insert into course values('3-105','计算机导论','825');
-- insert into course values('3-245','操作系统','804');
-- insert into course values('6-166','数字电路','856');
-- insert into course values('9-888','高等数学','831');
-- #添加成绩表
-- insert into score values('103','3-245','86');
-- insert into score values('105','3-245','75');
-- insert into score values('109','3-245','68');
-- insert into score values('103','3-105','92');
-- insert into score values('105','3-105','88');
-- insert into score values('109','3-105','76');
-- insert into score values('101','3-105','64');
-- insert into score values('107','3-105','91');
-- insert into score values('108','3-105','78');
-- insert into score values('101','6-166','85');
-- insert into score values('107','6-166','79');
-- insert into score values('108','6-166','81');
1、 查询Student表中的所有记录的Sname、Ssex和Class列。
SELECT sname,ssex,class FROM student
2、 查询教师所有的单位即不重复的Depart列。
SELECT DISTINCT depart 院系 FROM teacher;
3、 查询Student表的所有记录。
SELECT * FROM student
4、 查询Score表中成绩在60到80之间的所有记录。
SELECT * FROM score WHERE degree BETWEEN 60 AND 80;
5、 查询Score表中成绩为85,86或88的记录。
SELECT * FROM score WHERE degree in(85,86,88)
SELECT * FROM score WHERE degree=85 OR degree=86 OR degree=88;
6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM student WHERE class=95031 OR ssex='女' ;
7、 以Class降序查询Student表的所有记录。
SELECT * FROM student ORDER BY class DESC
8、 以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM score ORDER BY cno ASC ,degree DESC
9、 查询“95031”班的学生人数。
SELECT class,count(sno) FROM student WHERE class='95031'
SELECT class,count(sno) FROM student GROUP BY class='95031' HAVING class='95031'
10、查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
SELECT * FROM score ORDER BY degree DESC LIMIT 0,1
11、 查询每门课的平均成绩。
SELECT cno,AVG(degree) FROM score GROUP BY cno
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT AVG(degree) FROM score WHERE cno LIKE '3%'
GROUP BY cno HAVING COUNT(*)>5
13、查询分数大于70,小于90的Sno列。
SELECT * FROM score WHERE degree>70 AND degree<90;
14、查询所有学生的Sname、Cno和Degree列。
SELECT student.sname,score.cno,score.degree
FROM student,score WHERE student.sno=score.sno
15、查询所有学生的Sno、Cname和Degree列。
SELECT score.sno,course.cname,score.degree
FROM score,course WHERE score.cno= course.cno
16、查询所有学生的Sname、Cname和Degree列。
SELECT student.sname,course.cname,score.degree
FROM student,score,course WHERE student.sno=score.sno AND score.cno= course.cno
17、查询“95033”班学生的平均分。
SELECT AVG(degree)
FROM student,score WHERE student.sno=score.sno AND
(student.class='95033')
18、 假设使用如下命令建立了一个grade表:
create table grade(low int(3),upp int(3),rank char(1))
insert into grade values(90,100,’A’)
insert into grade values(80,89,’B’)
insert into grade values(70,79,’C’)
insert into grade values(60,69,’D’)
insert into grade values(0,59,’E’)
```
现查询所有同学的Sno、Cno和rank列。
SELECT score.sno,score.cno,grade.rank
FROM score,grade WHERE degree BETWEEN low AND upp;
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT * FROM student WHERE sno in(SELECT sno FROM score WHERE
degree>(SELECT degree FROM score WHERE sno='109' AND cno='3-105') AND cno='3-105')
20、选了多门课程并且是这个课程下不是最高分的
-- SELECT * from score sc
-- RIGHT JOIN(SELECT cno,max(degree) as max from score GROUP by cno) sc1 on sc.cno = sc1.cno
-- where sc.degree < max
-- and SNO IN (SELECT SNO FROM SCORE GROUP BY SNO HAVING COUNT(SNO) > 1)
-- SELECT * FROM score a WHERE sno IN (
-- SELECT SNO FROM score GROUP BY sno HAVING COUNT(*)>1) AND
-- degree<( SELECT MAX(degree) FROM score b WHERE a.cno = b.cno)
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT * FROM student WHERE sno in(SELECT sno FROM score WHERE
degree>(SELECT degree FROM score WHERE sno='109' AND cno='3-105') AND cno='3-105')
23、查询“张旭“教师任课的学生成绩。
SELECT teacher.tname,score.cno,score.degree
FROM score,course,teacher WHERE teacher.tno=course.tno AND course.cno= score.cno
AND(teacher.tname='张旭');
24、查询选修某课程的同学人数多于5人的教师姓名。
SELECT DISTINCT teacher.tnameFROM teacher WHERE tno=(
SELECT tno FROM course WHERE cno=(
SELECT cno FROM score GROUP BY cno HAVING COUNT(cno)>5));
25、查询95033班和95031班全体学生的记录。
SELECT * FROM student WHERE class='95031' OR class='95033'
26、 查询存在有85分以上成绩的课程Cno。
SELECT * FROM score WHERE degree>85;
27、查询出“计算机系“教师所教课程的成绩表。
SELECT teacher.tname,score.cno,score.degree
FROM score,course,teacher WHERE teacher.tno=course.tno AND course.cno= score.cno
AND(teacher.depart='计算机系');
28、查询“计算 机系”与“电子工程系“不同职称的教师的Tname和Prof。
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
SELECT cno,sno,degree FROM score WHERE cno='3-105'AND degree>(SELECT MAX(degree) FROM score WHERE cno='3-245')ORDER BY degree DESC
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree。
SELECT cno,sno,degree FROM score WHERE cno='3-105'AND degree>(SELECT MAX(degree) FROM score WHERE cno='3-245')
31、 查询所有教师和同学的name、sex和birthday。
SELECT sname ,ssex ,sbirthday FROM student UNION SELECT tname,tsex,tbirthday FROM teacher;
32、查询所有“女”教师和“女”同学的name、sex和birthday。
SELECT sname ,ssex ,sbirthday FROM student WHERE ssex='女'
UNION SELECT tname,tsex,tbirthday FROM teacher WHERE tsex='女'
33、 查询成绩比该课程平均成绩低的同学的成绩表。
34、 查询所有任课教师的Tname和Depart。
SELECT DISTINCT teacher.tname,teacher.depart FROM score,course,teacher WHERE score.cno=course.cno AND course.tno=teacher.tno
35 、查询所有未讲课的教师的Tname和Depart。
SELECT DISTINCT teacher.tname,teacher.depart FROM teacher WHERE tname not in (
SELECT tname FROM score,course,teacher WHERE score.cno=course.cno AND course.tno=teacher.tno )
36、查询至少有2名男生的班号。
SELECT class FROM student WHERE ssex='男' GROUP BY class HAVING COUNT(*)>1
37、查询Student表中不姓“王”的同学记录。
SELECT * FROM student WHERE sname not LIKE ('王%')
38、查询Student表中每个学生的姓名和年龄。
SELECT sname,year(now())-year(Sbirthday)as 年龄 FROM student
39、查询Student表中最大和最小的Sbirthday日期值。
SELECT MAX(sbirthday)AS 最大,MIN(sbirthday)AS 最小 FROM student
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT * FROM student ORDER BY class DESC ,Sbirthday ASC
41、查询“男”教师及其所上的课程。
SELECT teacher.tname,course.cname FROM teacher,course WHERE teacher.tno=course.tno AND teacher.tsex='男'
42、查询最高分同学的Sno、Cno和Degree列。
SELECT sno,cno,degree FROM score ORDER BY degree DESC LIMIT 0,1
43、查询和“李军”同性别的所有同学的Sname。
SELECT * FROM student WHERE ssex =(SELECT ssex FROM student WHERE sname='李军') AND sname NOT in ('李军')
44、查询和“李军”同性别并同班的同学Sname。
SELECT * FROM student WHERE ssex =(SELECT ssex FROM student WHERE sname='李军')
AND sname NOT in ('李军') AND class=(SELECT class FROM student WHERE sname='李军')
45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT sno,degree FROM score WHERE cno in(SELECT cno FROM course WHERE cname='计算机导论')AND sno in(SELECT sno FROM student WHERE ssex='男')
a='qweqfqgdg'
>>> print(a[0:])//正序输出
qweqfqgdg
>>> print(a[::-1])//倒序输出
gdgqfqewq
a='qweqfqgdg'
>>> print(a) //输出
qweqfqgdg
>>> len(a) //输出字符串长度
9
>>> a='qweqfqgdg' //指定范围出现的次数
>>> c=a.count('q',0,8)
>>> print(c)
3
>>> a='qweqfqgdg'
>>> c=a.count('q',2,5)
>>> print(c)
1
>>> a='qweqfqgdg' //分隔截取字符串
>>> c=a.split('e')
>>> print(c)
['qw', 'qfqgdg']
>>> a='qweqfqegdg' //指定范围分隔截取字符串
>>> a.split('e',1)
['qw', 'qfqegdg']
>>> a='qweqfqegdg' //判断字符串是否包含数字
>>> a.isdigit()
False
>>> a='abcdabkrajb'
>>> a.count('ab')
2
>>> a.count('e')
0
>>> a='adc kdn lad'
>>> a.split('d')[1:3]
['c k', 'n la']
>>>
a='sdfhsdhfa'
>>> print(a[2:5].isdigit(),'hello',sep='*')
False*hello
>>> a='sdfhsdhfa'
>>> (a[2:5]).isdigit(),(a[2:5])+'hello'
(False, 'fhshello')
请大家实现一个程序, 对人的健康状况进行评估。
该程序运行起来先询问用户
请输入你的身高(单位米):
用户输入身高(比如1.8)后,再询问用户
请输入你的体重(单位公斤):
用户输入体重(比如70)后,再询问用户
请输入你的年龄:
用户输入年龄(比如30)后,进行如下判断:
如果用户 年龄 < 10 岁, 显示:10岁以下儿童不参与健康评估
如果用户 年龄 >=10 岁 并且 < 60 岁:
如果 体重 除以 身高的2次方 > 24 就提示用户体重超重
如果 体重 除以 身高的2次方 < 18 就提示用户体重超轻
否则,就提示用户 体重正常
如果用户 年龄 >= 60 岁, 显示:60岁以上老人不参与健康评估
height = float(input('请输入你的身高(单位米):'))
weight = float(input('请输入你的体重(单位公斤):'))
age = int(input('请输入你的年龄:'))
if age < 10:
print('10岁以下儿童不参与健康评估')
elif 10 <= age < 60:
if (weight / (height**2)) > 24:
print('体重超重')
elif (weight / (height**2)) < 18:
print('体重超轻')
else:
print('体重正常')
elif age >= 60:
print('60岁以上老人不参与健康评估')
6 > 7 or (8 > 9 and 10 > 9) false
(6 > 7 or 8 > 4) and 10 > 9 true
(7 > 6 or 8 > 4) and 10 > 9 true
7 > 6 or (8 > 4 and 10 > 9) true
有如下的代码,定义了一个Python列表 变量
var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]
请接下来写一行代码,在列表的结尾处添加一个元素 字符串 ‘你好’
var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.append('你好')
print(var1)
有如下的代码,定义了一个Python列表 变量
var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]
请接下来写一行代码,在列表的开头处添加一个元素: 字符串 ‘你好’
var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.insert(0,'你好')
print(var1)
有如下的代码,定义了一个Python列表 变量
var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]
请接下来写一行代码,在列表33这个元素的后面 添加一个元素 字符串 ‘你好’
var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.insert(1,'你好')
print(var1)
有如下的代码,定义了一个Python字符串
str1 = ‘大家好,我的名字叫:大聪明’
请接下来写一行代码,不要数人名字的下标位置,而是使用字符串find方法 找到人名字的下标位置,打印出 str1里面的人名字。
str1 = '大家好,我的名字叫:大聪明'
b=str1.find('大聪明')
print(str1[b:])
有如下的代码,定义了一个Python字符串
str1 = ‘大家好,我的名字叫:大聪明’
请接下来写一行代码,不要数人名字的下标位置,而是使用字符串split方法,打印出 str1里面的人名字。
str1 = '大家好,我的名字叫:大聪明'
c=str1.split(':')
print(c)
b=c.index('大聪明')
print(b)
print(c[b])
请写一个程序:
首先提示用户输入年龄、身高、体重信息,格式如下如下
请输入您的性别:男
请输入您的身高(厘米):175厘米
请输入您的体重(公斤):80公斤
注意:
用户输入的内容,前后、中间都可能有空格,比如 175 厘米
然后根据如下的计算公式,计算出身高对应的标准体重。
标准体重(男)=(身高cm-100)x0.9(kg)
标准体重(女)=(身高cm-100)x0.9(kg)-2.5(kg)
如果体重在标准体重上下5公斤,都属于标准体重,提示用户体重标准。
否则提示用户高于标准还是低于标准
注意:预习Python循环,然后试着完成蜗牛ATM,完成用户登录、注册、退出功能
sex = input('请输入你的性别:')
height = input('请输入你的身高(厘米):')
a =float(height.split()[0])
weight = float(input('请输入你的体重(公斤):'))
if sex=='男':
boy = (a - 100) * 0.9
if (weight < (boy + 5)) and (weight > (boy - 5)):
print('体重标准')
elif(weight > (boy + 5)) :
print('高于标准')
elif (weight < (boy - 5)):
print('低于标准')
else :
girl = (a - 100) * 0.9 - 2.5
if (weight < (girl + 5)) and (weight > (girl - 5)):
print('体重标准')
elif(weight > (girl + 5)) :
print('高于标准')
elif (weight < (girl - 5)):
print('低于标准')
sex = input('请输入你的性别:')
height = input('请输入你的身高(厘米):')
a =float(height.replace(' ',''))
weight = float(input('请输入你的体重(公斤):'))
if sex=='男':
boy = (a - 100) * 0.9
if (weight < (boy + 5)) and (weight > (boy - 5)):
print('体重标准')
elif(weight > (boy + 5)) :
print('高于标准')
elif (weight < (boy - 5)):
print('低于标准')
else :
girl = (a - 100) * 0.9 - 2.5
if (weight < (girl + 5)) and (weight > (girl - 5)):
print('体重标准')
elif(weight > (girl + 5)) :
print('高于标准')
elif (weight < (girl - 5)):
print('低于标准')
下面的log变量记录了云服务器上 当天上传的文件信息
其中第一列是文件名,第二列是文件大小
请编写一个程序,统计出不同类型的 文件的大小总和
比如: jpeg 9988999
json 324324
png 2423233
a= log.replace('\t',',')
list2 = a.split()
n_dict = {}
for one in list2:
sx = one.split(',')[4]
nc = int(one.split(',')[1])
if sx in n_dict :
n_dict[sx] += nc
else:
n_dict[sx] = nc
print(n_dict)
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛
熊宁
玉琴
骆龙
韩旭
杨高旺
杰益
莫福
伟伟
李福
'''
请写一个程序
找出 str1 中所有 str2 中不存在的人名,并且
找出 str2 中所有 str1 中不存在的人名
def getNameList(namesStr):
tmp = namesStr.splitlines()
# 去掉其中的空行和人名前后的空格
names = []
for name in tmp:
name = name.strip()
if name == '':
continue
names.append(name)
return names
names1 = getNameList(str1)
names2 = getNameList(str2)
print('str1中独有的人名是:')
for name in names1:
if name not in names2:
print(name)
print('\n\n')
print('str2中独有的人名是:')
for name in names2:
if name not in names1:
print(name)
ageTable = '''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
请写一个程序将其中 30岁以上和以下的人分别打印出来
ageList = []
for item in ageTable.split('\n'):
# 跳过空行
if item.strip() == '':
continue
ageList.append(item)
g30 = [] # 大于30岁人员列表
l30 = [] # 小于30岁人员列表
for oneman in ageList:
name,age = oneman.split(',')
age = int(age.strip())
name = name.strip()
if age >= 30:
g30.append(name)
else:
l30.append(name)
print('大于等于30岁的人有:')
for man in g30:
print(man)
print('\n小于30岁的人有:')
for man in l30:
print(man)
content = '''
Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python) 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python) 赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
Python高级开发工程师 上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师 上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员
'''
注:只取月薪(数字)
for one in content.splitlines():
if one.strip() == '':
continue
else:
#去万/的下标
pos = one.find('万/')
#取数字下标
idx = pos - 1
while one[idx].isdigit() or one[idx] == '.':
idx -= 1
#截取字符串
info = one[idx+1:pos]
print(info)
# 1.下面的log变量记录了云服务器上 当天上传的文件信息
# 其中第一列是文件名,第二列是文件大小
#
# 请编写一个程序,统计出不同类型的 文件的大小总和
# 比如:
# jpeg 9988999
# json 324324
# png 2423233
# ----------------------------------
log = '''
f20180111014341/i_51a7hC3W.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156063244230469 image/jpeg 0
f20180111014341/j_R0Hpl4EG.json 1036 ForGzwzV3e-uR3_UzvppJs1VgfQG 15156064773253144 application/json 0
f20180111020739/i_0TDKs0rD.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156076847077556 image/jpeg 0
f20180111020739/j_JFO6xiir.json 1040 FmUhTchdLOd7LBoE8OXzPLDKcW60 15156077904192983 application/json 0
f20180111090619/i_1BwNksbL.jpg 49634 FtXBGmipcDha-67WQgGQR5shEBu2 15156329458714950 image/jpeg 0
f20180111090619/i_3BKlsRaZ.jpg 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156330575626044 image/jpeg 0
f20180111090619/i_5XboXSKh.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156329453409855 image/jpeg 0
f20180111090619/i_6DiYSBKp.jpg 74017 FrYG3icChRmFGnWQK6rYxa88KuQI 15156329461803290 image/jpeg 0
f20180111090619/i_76zaF2IM.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ 15156334738356648 image/jpeg 0
f20180111090619/i_B6TFYjks.jpg 37953 FleWqlK2W1ZmEgAatAEcm1gpR0kC 15156329464034474 image/jpeg 0
f20180111090619/i_N9eITqj3.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ 15156330419595764 image/jpeg 0
f20180111090619/i_QTSNWmA6.jpg 37953 FleWqlK2W1ZmEgAatAEcm1gpR0kC 15156333104224056 image/jpeg 0
f20180111090619/i_XdHcAfh1.jpg 56479 FjLQIQ3GxSEHDfu6tRcMylK1MZ05 15156334227270309 image/jpeg 0
f20180111090619/i_Xyy723MU.jpg 50076 FsfZpQzqu084RUw5NPYW9-Yfam_R 15156334229987458 image/jpeg 0
f20180111090619/i_d8Go0EOv.jpg 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156334736228515 image/jpeg 0
f20180111090619/i_diuHmX53.jpg 40591 FuTx1pw4idbKnV5MSvNGxCA5L470 15156333878320713 image/jpeg 0
f20180111090619/i_qQKzheSH.jpg 55858 Fj0A3i8V7fzzOiPQFL79ao15hkN9 15156329456666591 image/jpeg 0
f20180111090619/i_rHL5SYk8.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156336509742181 image/jpeg 0
f20180111090619/i_xZmQxUbz.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156333240603466 image/jpeg 0
f20180111090619/i_zBDNgXDv.jpeg 73616 FlgNwq8lypgsxrWs_ksrS_x47SQV 15156334232887875 image/jpeg 0
f20180111090619/j_4mxbEiVh.json 2990 Fpq-3yl3Yr1CadNrJVSDnpeRhQtT 15156331445226898 application/json 0
f20180111090619/j_i1K74768.json 3042 Fl5PpDw1TsZXMuhoq1RUrOeGZ6br 15156335067090003 application/json 0
f20180111095839/i_Q7KMKeda.png 518522 Fl-yB1_ruL2uxZN9k7DjB62h9dYH 15156359599713253 image/png 0
f20180111095839/j_5DpqHolV.json 184 FoYvi7cmSrzuVjUgCRzW5kU95SVo 15156359719719064 application/json 0
f20180111100442/i_No8kToIV.jpg 48975 Fu1cw3f--5Vpz9kLGeJfvljhCtyZ 15156364349642377 image/jpeg 0
f20180111100442/i_P1bkvSeg.jpg 68200 FvYe8vi46TjUKhEy_UwDqLhO6ZsW 15156363800690634 image/jpeg 0
f20180111100442/i_T1AulKcD.jpg 52641 Fj2YzvdC1n_1sF93ZZgrhF3OzOeY 15156364021186365 image/jpeg 0
f20180111100442/i_X8d8BN07.jpg 50770 FivwidMiHbogw77lqgkIKrgmF3eA 15156363969737156 image/jpeg 0
f20180111100442/i_g0wtOsCX.jpg 76656 Fmtixx0mP9CAUTNosjLuYQHL6k0P 15156363448222155 image/jpeg 0
f20180111100442/i_h5OT9324.jpg 72672 FvbIqPLTh2cQHTIBv2akUfahZa_Z 15156364401354652 image/jpeg 0
f20180111100442/i_he8iLYI6.jpg 49399 FjeJvwjwhU-hKZsq66UoBg9_tEJs 15156363907932480 image/jpeg 0
f20180111100442/i_kg29t7Pp.jpg 76293 FuYj__sSeEN7AsXMbxO24Z8Suh8d 15156364156384686 image/jpeg 0
f20180111100442/i_oz1YoBI1.jpg 75620 FkY3xsUMwOI01zgoH1iXXgiQeq6I 15156364089112904 image/jpeg 0
f20180111100442/i_xrOT98on.jpg 50021 Fql7ookM1Rc6V7VairKAfnKe-o9w 15156363856357316 image/jpeg 0
f20180111135114/i_Zqt8Tmoe.png 161629 FlELw59_mV3VqDBLyu1BKN4fIWnx 15156500155209863 image/png 0
f20180111135114/j_uhHoMXKq.json 159 FrypljwAr2LgoLAePBNTUYTUAgDt 15156500200488238 application/json 0
f20180111142119/i_s83iZ2GR.png 92278 Fns8tdh3JCkRmfE_COYEu4o8w03E 15156517082371259 image/png 0
f20180111142119/j_0g45JRth.json 159 Fq1rFwdRguYRXrp61nGZ5TsUG1V- 15156517143375596 application/json 0
f20180111144306/i_yE5TC84E.png 139230 Fjf61ymabEnEvnr5ZMHFjXGCrYlP 15156530038824150 image/png 0
f20180111144306/j_OF4WVtSH.json 159 FqwkKcxfo8jd0jFUyuH4X2CrnE9q 15156530083419530 application/json 0
f20180111150230/i_KtnER4g3.png 120044 FuwOWdrqzcr2-UScem-LzEMgMezs 15156541734892258 image/png 0
f20180111150230/j_xMSUEejY.json 158 FjJr_4deMqFphGaptm-2Pa6wwRP2 15156541771989216 application/json 0
f20180111151741/i_JuSWztB3.jpg 92506 FrIjRevHSi6xv4-NQa2wrHu5a1zQ 15156550875370965 image/jpeg 0
f20180111153550/i_9wWzVenl.gif 769872 FvslKY9JUaCQm-lu02E34tvAP_oG 15156561674621628 image/gif 0
'''
# 定义一个空字典,用存放之前处理过的数据
image_dict = {}
log_list = log.splitlines()
for one in log_list:
if one.strip() == '':
continue
else:
#取出来每一个行元素在根据制表符\t来切割,切割后的结果是列表,列表的下标为1的元素作为图片大小,下标为0d的元素图片格式,需要再次切割
row = one.split(" ")
#图片大小
image_size = int(row[1])
#图片类型
image_type = row[0].split('.')[1]
if image_type in image_dict:
image_dict[image_type] += image_size
else:
image_dict[image_type] = image_size
print(image_dict)
正则方法:
import re
p = re.compile(r'\.(\w+)\s(\d+)')
c = {}
for one in p.findall(log):
if one[0] not in c:
c[one[0]] = int(one[1])
else:
c[one[0]] += int(one[1])
print(c)
大家自学requests库,官方文档如下(http://cn.python-requests.org/zh_CN/latest/),然后使用其中的方法,将如下两个网址内容爬取回来,使用python文件读写的内容,写入到名为filetest.txt的文本文档中;注意在爬取网址内容的方法写出函数,方便重复调用;
网址一:http://mirrors.aliyun.com/centos/7/isos/x86_64/0_README.txt
网址二:http://mirrors.aliyun.com/centos/7/isos/x86_64/sha256sum.txt
import requests
#将url放在列表中
urls = ['http://mirrors.aliyun.com/centos/7/isos/x86_64/0_README.txt', 'http://mirrors.aliyun.com/centos/7/isos/x86_64/sha256sum.txt']
def gat_text(url):
r = requests.get(url)
return r.text
#存放的文本内容
text_list = []
#遍历存放url的地址,然后进行函数调用,将内容添加到text_list列表中
for url in urls:
text = gat_text(url)
#将文本内容存在列表中
text_list.append(text)
with open('filetest.txt', 'a+') as a:
for one in text_list:
a.write(one)
打开文件,文件中记录了人的姓名和年龄,请编写一个程序,将其中年龄大于50岁的人找出来,并且以如下格式追加到文件末尾中。
熊宁 : 33
杰益 : 22
王伟伟: 54
青芳 : 45
玉琴 : 64
焦候涛: 42
莫福 : 44
杨高旺: 44
唐欢欢: 36
韩旭 : 55
高法: 54
李伟: 25
格式如下:
大于50岁的人有:xxx,xxx,xxx
with open('userinfo.txt','a+',encoding='utf-8') as a:
#a+模式打开文件,指针在文件末尾,需要移动到文件开头
a.seek(0)
#读取成一个字符串
usertext = a.read()
#保存处理后的结果
user_list_info = []
#根据换行符来切割,成列表然后遍历
for one in usertext.splitlines():
if one.strip() == '':
continue
else:
#根据:切割,然后是去掉空格然后比较年龄大小
name,age = one.split(':')
if int(age.strip()) > 50 :
user_list_info.append(name.strip())
#将列表转换为字符串,中间用逗号隔开
b = ','.join(user_list_info)
a.write(f'\n\n\n大于50岁的人有:{b}')
请定义一个函数 mySort,参数为一个列表,参数列表中的元素都是整数.
mySort 函数需要将参数列表中的元素按从小到大排序,最终返回一个新的list。
请按下面算法的思路实现函数:
1. 创建一个新的列表newList
2. 先找出所有元素中最小的,append在newList里面
3. 再找出剩余的所有元素中最小的,append在newList里面
4. 依次类推,直到所有的元素都放到newList里面
list1 = []
def mySort(listname):
newList = []
for one in len(listname):
list_min = min(listname)
newList.append(list_min)
listname.remove(list_min)
return newList
现有文件1(如下,请保存到文件file1.txt中), 记录了公司员工的薪资,其内容格式如下
name: Jack ; salary: 12000
name :Mike ; salary: 12300
name: Luk ; salary: 10030
name :Tim ; salary: 9000
name: John ; salary: 12000
name: Lisa ; salary: 11000
每个员工一行,记录了员工的姓名和薪资,
每行记录 原始文件中并不对齐,中间有或多或少的空格
现要求实现一个python程序,计算出所有员工的税后工资(薪资的90%)和扣税明细,
以如下格式存入新的文件 file2.txt中,如下所示
name: Jack ; salary: 12000 ; tax: 1200 ; income: 10800
name: Mike ; salary: 12300 ; tax: 1230 ; income: 11070
name: Luk ; salary: 10030 ; tax: 1003 ; income: 9027
name: Tim ; salary: 9000 ; tax: 900 ; income: 8100
name: John ; salary: 12000 ; tax: 1200 ; income: 10800
name: Lisa ; salary: 11000 ; tax: 1100 ; income: 9900
要求像上面一样的对齐
tax 表示扣税金额和 income表示实际收入。注意扣税金额和 实际收入要取整数
with open('file1.txt',encoding='utf-8') as a,open('file3.txt','w') as b:
a_txt = a.read()
for one in a_txt.splitlines():
#取name
name = one.split(";")[0].split(':')[1].strip()
#取薪资
salary = one.split(";")[1].split(':')[1].strip()
#计算税后薪资和税收
income = int(salary) * 0.9
tax = int(salary) - income
b.write('name:{:<10}; salary:{:>10}; tax:{:^10}; income:{:>10}\n'.format(name,int(salary),tax,income))
动物园多线程版
一个动物园有十个房间,里面有两种动物,老虎、羊。老虎的体重是200斤,羊体重100斤。游戏开始之前,在10个房间里面,随机
放入老虎和羊。游戏这的目标是要把羊和老虎喂的越重越好。
游戏开始后,系统随机给出房间号。游戏者开始必须弄清楚,每个房间是老虎还是羊,方法是敲房间门,里面的动物都会叫,老虎叫声‘wow!!!’,
羊叫声是‘mie’。动物每叫一次体重减5斤。喂老虎应该输入单词meet,喂羊应该输入单词grass。喂对了体重加10斤。喂错了。体重减少10斤
游戏者需要强记每个房间的动物是什么,以便不需要敲门就可以得知里面的动物是什么,从而该喂什么。这样不断循环。游戏2分钟结束后。看看你喂的动物总体重多少
import random
import time
from random import randint
from threading import Thread
import os
class Tiger():
#静态属性
classnames='老虎'
#实例属性
def __init__(self,weight=200):
self.a=weight
#老虎的叫喊
def shout(self):
print('叫喊一次wow!!!')
self.a -= 5
# return self.a
#喂食
def eat(self,feed):
if feed == 'meet':
print("喂食正确,体重加10")
self.a += 10
elif feed == 'grass':
print("喂食错误,体重减10")
self.a -= 10
#羊
class Sheep():
classnames = '羊'
# 实例属性
def __init__(self, weight=100):
self.a = weight
# 羊的叫喊
def shout(self):
print('叫喊一次mie!!!')
self.a -= 5
# return self.a
# 喂食
def eat(self, feed):
if feed == 'meet':
print("喂食错误,体重减10")
self.a -= 10
elif feed == 'grass':
print("喂食正确,体重加10")
self.a += 10
#房间
class Room():
def __init__(self,num ,species):
self.b = num #房间号
self.c = species #物种
#随机动物绑定房间
rooms=[]
idx=1
while idx<=10:
st = random.choice(['老虎', '羊'])
if st == '老虎':
t1 = Tiger()
elif st == '羊':
t1 = Sheep()
rooms.append([idx,t1, st]) #实例化的10个房间对象,添加到列表中
idx += 1
print(rooms)
def count_third():
#判断游戏时间
start_time = time.time()
weight2 = 0
while True:
cur_time = time.time()
if cur_time - start_time > 20: #判断时间是否超过120秒
for id,room in enumerate(rooms):
print(f"{id+1}号房间的动物为{room[2]}体重是{room[1].a}")
weight2 += room[1].a
print(f'动物的总体重为:{weight2}')
break
os._exit(0)
t1 = Thread(target=count_third)
t1.start()
while True:
# 随机出现0到9作为列表的下标
list_id = randint(0,9)
#随机出现的单个房间
room_obj = rooms[list_id]
r = input(f"当前是{list_id+1}号房间,请选择是否敲门,敲门输入y")
if r =='y':
room_obj[1].shout()
fed = input("请输入食物")
room_obj[1].eat(fed)
大家自学requests库,官方文档如下(http://cn.python-requests.org/zh_CN/latest/),然后使用其中的方法,将如下两个网址内容爬取回来,使用python文件读写的内容,写入到名为filetest.txt的文本文档中;注意在爬取网址内容的方法写出函数,方便重复调用;
网址一:http://mirrors.aliyun.com/centos/7/isos/x86_64/0_README.txt
网址二:http://mirrors.aliyun.com/centos/7/isos/x86_64/sha256sum.txt
两个子线程爬取网页内容,主线程进行合并
import threading
import requests
urls = ['http://mirrors.aliyun.com/centos/7/isos/x86_64/0_README.txt', 'http://mirrors.aliyun.com/centos/7/isos/x86_64/sha256sum.txt']
info_text = []
def get_text(url):
r = requests.get(url)
info_text.append(r.text)
for url in urls:
t1 = threading.Thread(target=get_text,args=(url,))
t1.start()
t1.join()
with open('file10.txt','a+') as a:
for one in info_text:
a.write(one)
#数据怎么存
name_info = {"zhangsan":['123456','15512345678',5000],'wangwu':['123456','15512345678',5000]}
#查询
def Query_yue(username):
#取出登录用户的余额
print(f"{username}的账户余额为:{name_info[username][2]}")
#存款
def deposit(username):
a = float(input('请输入金额:'))
name_info[username][2] = name_info[username][2] + a
print(f'操作成功,您的余额为:{name_info[username][2]}')
#转账
def withdraw(username):
b = input('请选择转账目标用户:')
if b in name_info:
a = float(input('请输入金额:'))
if a <= name_info[username][2] :
name_info[username][2] = name_info[username][2] - a #扣除金额
name_info[b][2]=name_info[b][2] + a #增金额
print(f'操作成功,您的余额为:{name_info[username][2]}')
print(f'操作成功,对方的余额为:{name_info[b][2]}')
else:
print('余额不足,请重新输入')
withdraw(username)
else:
print('用户不存在,请重新输入')
withdraw(username)
#取款
def Transfer(username):
a=float(input('请输入金额:'))
if a<= name_info[username][2]: #判断余额是否够
name_info[username][2] =name_info[username][2] - a #扣除金额
print(f'操作成功,您的余额为:{name_info[username][2]}')
else:
print('余额不足,请重新输入')
Transfer(username)
#登录后的界面函数
def login1(username):
print('**********欢迎来到操作页面************')
a = input("请输入操作值:1查询、2存款、3转账、4、取款、5、返回主界面:")
if a == '1':
#查询
Query_yue(username)
login1(username) #成功后返回登陆界面
elif a == '2':
#存款
deposit(username)
login1(username)
elif a == '3':
#转账
withdraw(username)
login1(username)
elif a == '4':
#取款
Transfer(username)
login1(username)
elif a == '5':
ATM()
else:
print("输入操作值有误,请重新输入")
login1()
#实现主页面
def login():
idx = 0 #自增,限制出错次数
while idx < 3: #登录3次机会
print("**********欢迎来到登录页面************")
username = input("请输入您的用户名:")
password = input("请输入密码:")
if username in name_info:
#判断字典里面的用户密码和输入的密码是否一致
if name_info[username][0] == password:
print("恭喜您登录成功,即将进入登录后页面")
login1(username)
else:
print("用户名或者密码错误")
print(f'还剩:{2-idx}次机会') #提醒剩余次数,共3次
else:
print('未找到该用户,请重新注册')
c =input('请选择操作:1、返回登录界面 2、注册新用户')
if c=='1':
login()
elif c=='2':
reg()
idx += 1 #自增idx=idx+1
#如果输入错误进入主界面
ATM()
def reg():
while True: #死循环(不限制次数)
print("**********欢迎来到注册页面************")
username = input("请输入您的用户名:")
#p判断用户名是否存在字典里,如果存在则让他重新输入,如果不存在判断用户名的合法性
if username in name_info:
print('用户名存在,请重新输入')
reg() #注册函数
else:
# 判断用户名是否合法
if 6 <= len(username) <= 12 and username.isalnum():
password = input("请输入密码:")
new_password = input("请输入确认密码")
#判断密码是否合法
if 6 <= len(password) <= 16 and password.isalnum() and password==new_password:
phone = input("请输入手机号码")
#判断手机是否合法
if len(phone) == 11 and phone.isdigit() and phone.startswith('1'):
name_info[username] = [password,phone,5000]
print("恭喜你,已经注册成功,请输入您的操作值:1代表登录、2代表注册、3代表退出:")
ATM()
else:
print('手机号格式有误,请重新输入')
reg()
else:
print("密码输入有误,请重新输入")
reg()
else:
print("用户名输入格式有误,请重新输入")
reg()
#主界面实现的思路:1代表登录、2代表注册、3代表退出,输入错误时需要重新返回到主页面
def ATM():
print("**********欢迎进入蜗牛ATM************")
input_one = input("请输入您的操作值:1代表登录、2代表注册、3代表退出:")
while True:
if input_one == "1":
login()
elif input_one == "2":
reg()
elif input_one == "3":
exit()
else:
print("输入有误,请重新输入操作值")
ATM()
ATM() #调用主函数,开始运行