第二周

第二周

礼拜一


基础练习题

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.计算 1100 以内能被 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.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
【程序分析】
开发步骤如下:

  1. 提示用户输入字符串
  2. 声明四个变量,分别用于统计英文字母、空格、数字和其他字符的个数
  3. 使用 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()

  1. \u4e00-\u9fa5 ↩︎

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值