第二周
礼拜一
基础练习题
1.输入某年某月某日,判断这一天是这一年的第几天?(提示:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,闰年且输入月份大于 2 时需考虑多加一天。)
#-*- coding: UTF-8 -*-
a_list=[0,31,28,31,30,31,30,31,31,30,31,30,31]
a=input('输入年份')
b=input('输入月份')
c=input('输入日期')
a=int(a)
b=int(b)
c=int(c)
sum=0
for (j,i) in enumerate(a_list) :
if j<b :
sum=sum+i
if (a%4 ==0 and a%100!=0) or a%400==0:
if b>2:
sum=sum+1
print(sum+c)
sum=0
for i in range(len(a_list)):
if i<b:
sum=sum+a_list[i]
if (a%4 ==0 and a%100!=0) or a%400==0:
if b>2:
sum=sum+1
print(sum+c)
enumerate()的具体用法
2.计算从 1 到 1000 以内所有能同时被 3,5 和 7 整除的数的和并输出
sum=0
for i in range (1,1000):
if i%105==0:
sum=sum+i
print(sum)
3.计算 1 到 100 以内能被 7 或者 3 整除但不能同时被这两者整除的数的个数。
sum1=0
sum2=0
for i in range(1,100):
if i%3==0 or i%7==0:
sum1=sum1+1
for i in range(1,100):
if i%21==0:
sum2=sum2+1
print(sum1-sum2)
4.计算 1 到 100 以内能被 7 整除但不是偶数的数的个数。
a=0
for i in range(1,100):
if i%7==0 and i%2!=0:
a=a+1
print(a)
5.计算从 1 到 100 临近两个整数的合并依次输出。比如第一次输出 3(1+2),第二次输出 5(2+3),最后一次输出 199(99+100)。
for i in range(1,100):
print(i+i+1)
6.给定一个整数 n,判断是否是质数(质数是只能被 1 和它自身整除的数)
#-*- coding: UTF-8 -*-
a=input('输入一个数')
a=int(a)
if a<=2:
print('是')
else:
i=2
while i<a:
if a%i==0:
print('不是')
break
i=i+1
else:
print('是')
7.给定一个不大于 9 的数 n,打印 nn 乘法表
#-*- coding: UTF-8 -*-
a=input('输入一个数')
a=int(a)
c=0
for i in range(1,a+1):
for j in range(1,a+1):
print(i,'*',j,'=',i*j)
8.五位数中,对称的数称为回文数,打印所有的回文数并计算个数。如:12321
#-*- coding: UTF-8 -*-
a=0
for i in range (10000,99999):
if i%10==i//10000 and i//1000%10==i//10%10:
print(i)
a=a+1
print('一共有',a,'个')
9.给定一个 n 位(不超过 10)的整数,将该数按位逆置,例如给定 12345 变成
#-*- coding: UTF-8 -*-
a=input('输入一个数字')
print(int(a[::-1]))
方法二
b=['1','0','0']
b.reverse()
k =0
s =len(b)
for i in range(s):
if b[i]=='0':
k+=1
else:
break
print(b[k:])
10.输出所有的三位水仙花数,其各位数字立方和等于该数本身。
for i in range(100,999):
if (i//100)**3+(i//10%10)**3+(i%10)**3==i:
print(i)
11.一球从 100 米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第 n 次落地时,共经过多少米?
#-*- coding: UTF-8 -*-
a=input('输入第几次落地')
a=int(a)
b=100
for i in range(1,a+1):
c=float(100/(2**(n-2)))
b=b+c
print(b)
12.给定一个数 a,求 s=a+aa+aaa+aaaa+aaaaa 的值,其中 a 是一个数字(1-9 之间)。例如 2+22+222+2222+22222
#-*- coding: UTF-8 -*-
a=input('输入一个数')
a=int(a)
print(a*10000+a*1000+a*100+a*10+a+a*1000+a*100+a*10+a+a*100+a*10+a+a*10+a+a)
方法二
#-*- coding: UTF-8 -*-
a=input('输入一个数')
a=int(a)
sum=0
for i in range(6):
b=(5-i)*(10**(i))*a
sum=sum+b
print(sum)
13.已知 abc+cba=1333, 其中的 a,b,c 均为一位数,编写一个程序,求出 a,b,c分别代表什么数字
a,b,c in range(1,9)
if a+c>=10:
if b+b+1>=10:
if (a+c)%10==3 (b+b+1)%10==3:
print(a,b,c)
14.给定一个整数 n,打印 3 到 n 以下的所有质数(质数是只能被 1 和它自身整
除的数
#-*- coding: UTF-8 -*-
a=input('输入一个数')
num=[]
a=int(a)
i=2
for i in range(2,a):
j=2
for j in range(2,i):
if(i%j==0):
break
else:
num.append(i)
print(num)
15.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
【程序分析】
开发步骤如下:
- 提示用户输入字符串
- 声明四个变量,分别用于统计英文字母、空格、数字和其他字符的个数
- 使用 for 循环遍历字符串中的字符,使用 if 判断语句判断遍历的字符满足
哪个条件,如果满足条件,则对应的变量加
#-*- coding: UTF-8 -*-
n=input('输入字符串')
n=list(n)
a=0
b=0
c=0
d=0
for i in n:
if 'a'<=i<='z' or 'A'<=i<='Z':
a=a+1
elif i in '0123456789':
b=b+1
elif i==' ':
c=c+1
else:
d=d+1
print(a,'字母',b,'数字',c,'空格',d,'其他')
16.通过用户输入三角形三边长度,并计算三角形的面积。
#-*- coding: UTF-8 -*-
a=input('输入三边长')
b=input('输入三边长')
c=input('输入三边长')
a=int(a)
b=int(b)
c=int(c)
p=(a+b+c)/2
print('面积是',(p*(p-a)*(p-b)*(p-c))**0.5)
礼拜二
课堂
1.def的使用
def(参数1,参数2,…):
具体内容
返回值
1写在主函数前
2注意全局变量和函数内变量的区别
2.课堂练习
def f1 (a):
s=str(a)
sum=0
for i in s:
sum=sum+int(i)
return sum
def f2(a):
s=str(a)
int(s[::-1])
return s
n=int(input('a'))
n=f1(n)
def f3(a,b):
for i in range(a,b+1):
if (i%4==0 and i%100!=0) or i%400==0:
c=366
else:
c=365
print(c)
m=int(input('a'))
l=int(input('b'))
f3(m,l)
def f4(a):
print(a//3600,a//60%60,a%60)
f=int(input('a'))
f4(f)
管理系统
#-*- coding: UTF-8 -*-
a_list=[]
def f1():
a_dict={}
a=str(input('请输入新用户姓名'))
b=str(input('请输入新用户性别'))
c=str(input('请输入新用户微信'))
d=str(input('请输入新用户手机'))
e=str(input('请输入新用户住址'))
a_dict['name']=a
a_dict['sex']=b
a_dict['weixin']=c
a_dict['shouji']=d
a_dict['zhuzhi']=e
a_list.append(a_dict)
def f2 ():
a=str(input('请输入姓名'))
for a_dict in a_list:
if a_dict['name']==a:
print('姓名',a_dict['name'],'性别',a_dict['sex'],'微信',a_dict['weixin'],'手机',a_dict['shouji'],'住址',a_dict['zhuzhi'])
def f3():
print('姓名' ,'性别' ,'微信' ,'手机' ,'住址' )
for a_dict in a_list:
print(a_dict['name'] ,a_dict['sex'] ,a_dict['weixin'] ,a_dict['shouji'] ,a_dict['zhuzhi'] )
def f4():
a=str(input('请输入姓名'))
for i in a_list:
if i['name']==a:
a_list.remove(i)
def f5():
a=str(input('请输入姓名'))
for a_dict in a_list:
if a_dict['name']==a:
a=str(input('请输入修改姓名'))
b=str(input('请输入修改性别'))
c=str(input('请输入修改微信'))
d=str(input('请输入修改手机'))
e=str(input('请输入修改住址'))
b_dict={}
b_dict['name']=a
b_dict['sex']=b
b_dict['weixin']=c
b_dict['shouji']=d
b_dict['zhuzhi']=e
a_dict.update(b_dict)
break
while True:
a=input('''=======================
用户管理系统
1.添加一个新用户信息
2.查询一个用户信息
3.显示所有用户信息
4.删除一个用户信息
5.修改一个用户信息
6.退出系统
=======================
''')
a.isnumeric()
if a in '0123456':
a=int(a)
if 1<=a<=6:
if a==1:
f1()
elif a==2:
f2()
elif a==3:
f3()
elif a==4:
f4()
elif a==5:
f5()
else:
print('退出系统')
break
else:
print('请输入数字')
```
(注意方法中变量和全局变量的区别和的覆写)
礼拜三
课堂内容
Map()和Filter()和reduce()
Map会将⼀个函数映射到⼀个输⼊列表的所有元素上。
这是它的规范: 规范 map(function_to_apply, list_of_inputs)
⼤多数时候,我们要把列表中所有元素⼀个个地传递给⼀个函数,并收集输出。
filter能创建⼀个列表,其中每个元素都是对⼀个函数能返回True.
reduce()函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,
得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
课堂练习
1.题目: 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
例如输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]
L1 = ['adam', 'LISA', 'barT']
def daxie(x):
x=x[0].upper()+x[1:].lower()
return x
L2 = list(map(daxie, L1))
print(L2)
舍近求远,用不用map()一样
正确做法
def test(name_list):
print(map(lamda name:name[0].ugger+name[1:]lower(),name_list))
2题目: 请尝试用filter()删除1~100的素数
def f1(num):
if (num<2):
return True
judge=2
while(judge<num):
if num%judge==0:
return True
judge+=1
return False
number_list=range(1,101)
print(list(filter(f1 ,number_list)) )
3题目: Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积
from functools import reduce
def prod (number_list):
print(reduce(lambda x,y:x*y,number_list,2))
prod([1,2,3,4,5])
a=[1,2,3,4]
print(reduce(lambda x,y:x*y,a))
课堂内容2
模块的引入
我们可以使用import 语句来引入模块,语法如下
import module1, module2,… moduleN
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
from modname import name1[, name2, … nameN
from modname import *(全部)
示例
import random
def make_code(n=5):
res=''
for i in range(5):
s1=str(random.randint(0,9))
s2=chr(random.randint(65,90))
res+=random.choice([s1,s2])
return res
print(make_code(10))
globals() 和 locals()
globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
示例
Money=2000
def AddMoney():
Money=10000
Money=Money+1
print( Money)
print (Money)
AddMoney()
python中文件的处理
r | 以读方式打开文件,可读取文件信息。 |
---|---|
w | 以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容 |
a | *以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建 |
r+ | 以读写方式打开文件,可对文件进行读和写操作。 |
---|---|
w+ | 消除文件内容,然后以读写方式打开文件。 |
a+ | 以读写方式打开文件,并把文件指针移到文件尾。 |
b | 以二进制模式打开文件,而不是以文本模式。该模式只对 Windows 或 Dos 有效,类 Unix 的文件是用二进制模式进行操作的。 |
示例 open
f=open(r"D:\130.txt",'r')
for line in f:
print(line,)
for line2 in f:
print(line2)#前一次已经读取了文件内容,并且到了文件的末尾了。再重复操作,就是从末尾开始继续读了。所以只显示一次
创建
nf=open("131.txt","w")
nf.write('this is a file')
写入 w
fp = open("131.txt","w")
fp.write("My name is qiwsir.\nMy website is qiwsir.github.io")
fp.close()
追加 a
fp = open("131.txt","a")
fp.write("\nAha,I like program\n")
fp.close()
礼拜四
python中文件的处理2
with:
Python引入了with
语句来自动帮我们调用close()
方法
with open("130.txt","a") as f:
f.write("\nThis is about 'with...as...'")
with open("130.txt","r") as f:
print(f.read())
os和time模块的引用
import os
import time
file_stat = os.stat("130.txt") #查看文件信息
print(file_stat)
print(time.localtime(file_stat.st_ctime))#字符串转换
read(),readline()和readlines()
read([size])`方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象.
readline()从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象
readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。
with open("132.txt","a") as f:
f.write("You Raise Me Up\n When I am down and, oh my soul, so weary;\n When troubles come and my heart burdened be; \nThen, I am still and wait here in the silence, \nUntil you come and sit awhile with me.\n You raise me up, so I can stand on mountains; \nYou raise me up, to walk on stormy seas;\n I am strong, when I am on your shoulders; \nYou raise me up: To more than I can be.")
b=open("132.txt","r")
while True:
line=b.readline()
if not line:
break
print(line)
print(b.readlines())
c=b.readlines()
for line in c:
print( line)
b.close()
fileinput ()
较大的文件
import fileinput
for line in fileinput.input("132.txt"):
print (line,end='')
seek()和tell()
f=open("132.txt","r")
f.readline()
f.readline()
f.readline()
print(f.readline())
f.seek(0)#移动到0位置
print(f.readline())
print(f.tell())
print(f.readline())
print(f.tell())#显示当前位置
正则
元字符 | 说明 |
---|---|
. | 代表任意字符 |
** | **** |
[ ] | 匹配内部的任一字符或子表达式 |
[^] | 对字符集和取非 |
- | 定义一个区间 |
** | 对下一字符取非(通常是普通变特殊,特殊变普通) |
***** | 匹配前面的字符或者子表达式0次或多次 |
*? | 惰性匹配上一个 |
+ | 匹配前一个字符或子表达式一次或多次 |
+? | 惰性匹配上一个 |
? | 匹配前一个字符或子表达式0次或1次重复 |
{n} | 匹配前一个字符或子表达式 |
{m,n} | 匹配前一个字符或子表达式至少m次至多n次 |
{n,} | 匹配前一个字符或者子表达式至少n次 |
{n,}? | 前一个的惰性匹配 |
^ | 匹配字符串的开头 |
\A | 匹配字符串开头 |
$ | 匹配字符串结束 |
[\b] | 退格字符 |
\c | 匹配一个控制字符 |
\d | 匹配任意数字 |
\D | 匹配数字以外的字符 |
\t | 匹配制表符 |
\w | 匹配任意数字字母下划线 |
\W | 不匹配数字字母下划线 |
练习
1.求非负整数
#-*- coding: UTF-8 -*-import re
import re
t=str(input('输入数字'))
if re.match(r'^\d+$', t):
print('shi')
else:
print('bushi')
2、匹配正整数:
^[1-9]*[1-9][0-9]*$
3.非正整数:
^(-\d+|(0+))$
4.负整数:
^-[0-9]*[1-9][0-9]*$
5、整数 :
^-?\d+$
6.非负浮点数 :
^\d+(\.\d+)?$
7.正浮点数 :
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
8、非正浮点数 :
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
9、负浮点数:
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
10、浮点数:
^(-?\d+)(\.\d+)?$
11、有数字、26个英文字母组成的字符串:
^[A-Za-z0-9]+$
中级练习
1、长度为8-10的用户密码(以字母开头、数字、下划线)
^[a-zA-Z]\w{7,10}$
2、验证输入只能是汉字 :
1{0,}$
3、电子邮箱验证:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
4、URL地址验证:
^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
5、电话号码的验证:
0\d{2}-\d{8}
6、简单的身份证号验证:
\d{15}|\d{18}$
礼拜五
异常处理
try…except…else的语法:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
fh.close()
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "Error: 没有找到文件或读取文件失败"
我们可以使用raise语句自己触发异常
raise语法格式如下
raise [Exception [, args [, traceback]]]
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def mye( level ):
if level < 1:
raise Exception,"Invalid level!"
# 触发异常后,后面的代码就不会再执行
try:
mye(0) # 触发异常
except Exception,err:
print 1,err
else:
print 2
类
概念:略
练习
1.\1. 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,
封装方法,求总分,平均分,以及打印学生的信息。
对象:学生
类:学生(student)
属性:姓名(name)
年龄(age)
性别(gender)
英语成绩(English—achievements)
数学成绩(mathematics)
语文成绩(chinese-achievement-test)
成绩:总成绩(total points)
平均成绩
#-*- coding: UTF-8 -*-
class Student:
def index(self):
name=None
age=None
gender=None
English_achievements=None
mathematics=None
chinese_achievement_test=None
def Total_points(self):
print('姓名:%s,年龄:%s,性别:%s'%(student1.name,student1.age,student1.gender))
print('%s的总成绩是:%s' % (student1.name, student1.English_achievements + student1.mathematics + student1.chinese_achievement_test))
print('%s的平均分是:%s' % (student1.name,(student1.English_achievements + student1.mathematics + student1.chinese_achievement_test)/3 ))
student1=Student()
student1.name=input('请输入姓名:')
student1.age=input('请输入年龄:')
student1.gender=input('请输入性别:')
student1.English_achievements=float(input('请输入英语成绩:'))
student1.mathematics=float(input('请输入数学成绩:'))
student1.chinese_achievement_test=float(input('请输入语文成绩'))
student1.Total_points()
4.定义一“圆”Cirlcle类,圆心为“点”Point类,构造一圆,求圆的周长和面积,并判断某点与圆的关系。
class Cirlcle:
def init(self):
centre_point=0
radius=None
def perimeter(self):
print('圆的周长是%s,面积是%s'%((cirlcle.radius23.14),(cirlcle.radius**2*3.14)))
class Point:
def init(self):
x=None
y=None
def judge(self):
if point.x+0>cirlcle.radius>point.y+0:
print('点在圆外面')
elif point.x+0<cirlcle.radius<point.y+0:
print('点在圆外边')
elif point.x==0cirlcle.radiuspoint.y==0:
print('点在圆上')
else:
print('点在圆里面')
cirlcle=Cirlcle()
cirlcle.radius=int(input('请输入圆的半径:'))
cirlcle.perimeter()
point=Point()
point.x=int(input('请输入点的x轴的位置'))
point.y=int(input('请输入点的y轴的位置'))
point.judge()
\u4e00-\u9fa5 ↩︎