例题

测试作业

数据库例题(一)

创建如下数据表

 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;

20200603_190758_275.png

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='男')

作业题*

6.15

  1. 输入一个字符串,用一条语句将其输出顺序进行调换。
a='qweqfqgdg'
>>> print(a[0:])//正序输出
qweqfqgdg

>>> print(a[::-1])//倒序输出
gdgqfqewq

  1. 输入一个字符串,输出其长度。
    len(string)
    返回字符串长度
    count(str, beg= 0,end=len(string))
    返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
    split(str="", num=string.count(str))
    num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串
    isdigit()
    如果字符串只包含数字则返回 True 否则返回 False
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
  1. 输入一个字符串‘abcdabkrajb’,分别求出‘ab’出现的次数和‘e’出现的次数。
>>> a='abcdabkrajb'
>>> a.count('ab')
2
>>> a.count('e')
0
  1. 直接定义一个字符串’adc kdn lad’,分别打印出以d分割的字符串的第二部分和第三部分。
>>> a='adc kdn lad'
>>> a.split('d')[1:3]
['c k', 'n la']
>>> 
  1. 任意定义一个字符串,截取其第3到第5个字符,判断其中是否只包含数字,输出true和false,然后将其和‘hello’字符串连接起来打印输出。
a='sdfhsdhfa'
>>> print(a[2:5].isdigit(),'hello',sep='*')
False*hello

>>> a='sdfhsdhfa'
>>> (a[2:5]).isdigit(),(a[2:5])+'hello'
(False, 'fhshello')

6.16

  1. 请大家实现一个程序, 对人的健康状况进行评估。

    该程序运行起来先询问用户

    请输入你的身高(单位米):

    用户输入身高(比如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岁以上老人不参与健康评估')
  1. 下面的表达式,运行结果分别是什么
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 
  1. 有如下的代码,定义了一个Python列表 变量

    var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]

    请接下来写一行代码,在列表的结尾处添加一个元素 字符串 ‘你好’

var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.append('你好')
print(var1)
  1. 有如下的代码,定义了一个Python列表 变量

    var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]

    请接下来写一行代码,在列表的开头处添加一个元素: 字符串 ‘你好’

var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.insert(0,'你好')
print(var1)
  1. 有如下的代码,定义了一个Python列表 变量

    var1 = [ 33, [‘我的名字’, ‘马保国’], ‘hello world!’]

    请接下来写一行代码,在列表33这个元素的后面 添加一个元素 字符串 ‘你好’

var1 = [33, ['我的名字', '马保国'], 'hello world!']
var1.insert(1,'你好')
print(var1)

  1. 有如下的代码,定义了一个Python字符串

    str1 = ‘大家好,我的名字叫:大聪明’

    请接下来写一行代码,不要数人名字的下标位置,而是使用字符串find方法 找到人名字的下标位置,打印出 str1里面的人名字。

str1 = '大家好,我的名字叫:大聪明'
b=str1.find('大聪明')
print(str1[b:])
  1. 有如下的代码,定义了一个Python字符串

    str1 = ‘大家好,我的名字叫:大聪明’

    请接下来写一行代码,不要数人名字的下标位置,而是使用字符串split方法,打印出 str1里面的人名字。

str1 = '大家好,我的名字叫:大聪明'
c=str1.split(':')
print(c)

b=c.index('大聪明')
print(b)

print(c[b])

  1. 请写一个程序:

    首先提示用户输入年龄、身高、体重信息,格式如下如下

    请输入您的性别:男

    请输入您的身高(厘米):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('低于标准')

6.17

  1. 下面的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)

6.26

大家自学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)


  1. ATM机创建
#数据怎么存
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()   #调用主函数,开始运行

你可能感兴趣的:(例题)