python编程大作业,python非常详细编程笔记

  python编程大作业,python非常详细编程笔记

  文章目录

  1.指定小数位数的小数保留1。%f方法2.format函数3.round()函数4 .直接截断2。确定变量1的数据类型。类型():2。is instance()3。_ _ class _ _ _ _ name _ _ attribute 3。Python中的类方法(@classmethod) 4。t设置中文对齐。5.使用datetime模块的timedelta类。6.获取抛出异常的具体信息。7.使用BeautifulSoup库移除字符串中的HTML标签。(免费学习推荐:,python视频教程,

  一、小数保留指定位小数

  1.%f 方法

  f=1.23456f1=%.4f % f

  F2=% .2f% fprint (f1,type (f1)) print (f2,type (f2)) print

  1.2346类‘str’1.23类‘str’很容易知道。此方法将舍入,但浮点类型被转换为字符串值,该值不再是原始值。

  2.format函数

  F=1.23456f1=format (f, . 4f) f2=format (f, . 2f) print (f1,type (f1)) print (f2,type (f2))

  1.2346 class str1.23 class str 同样,这个方法也会舍入,但是浮点类型转换成字符串值,不再是原来的值。

  3.round()函数

  A=1.23456b=2.355c=3.5d=2.5a1=圆形(a,3) B1=圆形(b,2) C1=圆形(c) D1=圆形(d) print (a1,type (a1)) print (B1,type (B1)

  1.235 class float 2.35 class float 4 class int 2 class int 可以看出,round()函数最终得到的是一个数值(浮点或整数),但在“舍入”和“进入”的规律中不一定:

  (1)在round (x,n)函数中,是否舍入取决于n位的值和n 1位的小数。

  (2)只有n 1位数为5时,才容易混淆。如果n是偶数,则n 1位数为5,然后进位,比如round(1.23456)最后变成1.235。

  (3)如果n是奇数,那么n 1位就是不进位的数字5,比如round(2.355),最后就是2.35。

  (4)如果n为0,即不填n时,最终结果与上面相反,即整数部分为偶数时,小数点后5位不进位,例如(round(2.5)变成2)。

  (5)整数部分为奇数时,小数位为5。(回合(3.5)变成4)

  4.直接截断

  a=int(1.23456 * 1000)/1000 Print(a)Print 1.234

  这个方法简单粗暴,直接把后面的去掉,不管是不是大于5。

  二、判断变量的数据类型

  1.type():

  a=1.23打印(类型(a))打印l

  t;class 'float'>。

  2.isinstance()

  原型为isinstance(x, A_tuple)

  

a = 1.23tp = isinstance(a,float)print(tp)
打印True

  3.class.__name__属性

  使用变量的__class__.__name__属性 ,这也是type()方法的实质:

  

num = 1.23print(num.__class__.__name__)
打印:

  

float
三、Python中的类方法(@classmethod)

  python做面向对象编程的时候,经常需要使用classmethod类方法,这并不是类中的方法。
类方法也算一种实用的技巧,简单描述之:“类方法让类模板具有记忆力”。
类模板就是我们所定义的类。在普通情况下,不使用类方法对类进行实例化,类本身是不具有记忆性的。只是当一个静态模板被套用多次而已。如果我们想让类在每一次实例化之后,都能记载一些记忆,会对很多操作很有用。

  

class Man:

   id = 0 # 类变量

   def __init__(self, name):

   self.name = name

   self.id = self.id_number()

   @classmethod

   def id_number(cls):

   cls.id += 1

   return cls.id

   a = Man('A')print(a.id)b = Man('B')print(b.id)

打印

  

12
对Man这个类进行实例化2次,每个实例的id都不一样。这就依靠类方法来实现了:首先,用@classmethod描述类方法,然后用"cls"代表本类。类方法对类属性进行的处理是有记忆性的。

  需要注意的是,类方法处理的变量一定要是类变量。因为在类方法里你用不了self来寻址实例变量,所以需要把类变量放到最前面描述,如上面的"id=0"所示。类变量是可以被self访问的,所以,在类变量定义好了以后,不需要在_init_函数里对类变量再一次描述。所以,上面代码里self.id不一定需要。

  四、str.format与制表符\t设置中文对齐

  str.format对字符串进行格式化,{:<x}的语法表示左对齐,{:>x}为右对齐,{:^x}为居中),少于x位自动补齐(默认为空格补齐),但是对于中文字符并不能很好地支持,所以会导致有多行中文字符串时出现不能对齐的现象,需要考虑到字符串所占长度并将中文字符串进行编码后再计算。

  

#name是包含中文的字符串,22是整个字符串一行的总长度,一般要顾及测试才能得到,\t后的x是一标记字符,可换为别的所需的字符串print('[{string:<{len}}\tx'.format(string=string+']',len=22-len(string.encode('GBK'))+len(string)))
具体可参考https://blog.csdn.net/excaliburrr/article/details/76794451

  五、datetime模块timedelta类的使用

  timedelta对象表示两个不同时间之间的差值, 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。
如果使用time模块对时间进行算术运算,只能将字符串格式的时间和struct_time格式的时间对象先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date, datetime.timedatetime.datetime对象做算术运算,且两个时间之间的差值单位也更加容易控制。
datetime.timedelta类的定义:

  

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位:

  

  • 1毫秒转换为1000微秒
  • 1分钟转换为60秒
  • 1小时转换为3600秒
  • 1周转换为7天
然后对这3个值进行标准化,使得它们的表示是唯一的:

  

  • microseconds : [0, 999999]
  • seconds : [0, 86399]
  • days : [-999999999, 999999999]
类属性

  类属性名称描述timedelta.mintimedelta(-999999999)timedelta.maxtimedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)timedelta.resolutiontimedelta(microseconds=1)实例方法和属性

  实例方法/属性名称描述td.days天 [-999999999, 999999999]td.seconds秒 [0, 86399]td.microseconds微秒 [0, 999999]td.total_seconds()时间差中包含的总秒数,等价于: td / timedelta(seconds=1)方法/属性描述datetime.datetime.now()返回当前本地时间(datetime.datetime对象实例)datetime.datetime.fromtimestamp(timestamp)返回指定时间戳对应的时间(datetime.datetime对象实例)datetime.timedelta()返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作

>>> import datetime>>>>>> datetime.timedelta(365).total_seconds() # 一年包含的总秒数31536000.0>>> dt = datetime.datetime.now()>>> dt + datetime.timedelta(3) # 3天后datetime.datetime(2020, 1, 22, 11, 17, 0, 214877)>>> dt + datetime.timedelta(-3) # 3天前datetime.datetime(2020, 1, 16, 11, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3) # 3小时后datetime.datetime(2020, 1, 19, 14, 17, 0, 214877)>>> dt + datetime.timedelta(hours=-3) # 3小时前datetime.datetime(2020, 1, 19, 8, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3, seconds=30) # 3小时30秒后 datetime.datetime(2020, 1, 19, 14, 17, 30, 214877)
更多关于Python对日期、时间的处理可参考https://www.jb51.net/article/105840.htm。

  六、获取抛出的异常具体信息

  很多时候,在Python运行抛出异常并接收到之后需要显示异常的具体信息,包括异常内容、异常所在的行数和异常所在的Python文件等等,分别使用args[0]__traceback__.tb_lineno__traceback__.tb_frame.f_globals["__file__"]属性即可,示意如下:

  

def get_exception_info():

   try:

   s = 2 / 0

   except Exception as e:

   print('异常内容:', e.args[0])

   print('异常行数:', e.__traceback__.tb_lineno)

   print('异常文件:', e.__traceback__.tb_frame.f_globals["__file__"])get_exception_info()

打印:

  

异常内容: pision by zero

  异常行数: 8异常文件: XXX/test.py

七、使用BeautifulSoup库去掉字符串中的HTML标签

  有时候,字符串中含有HTML标签,如

  

text = """<p>

  <h1>Title</h1>

  <p>A long text........ </p>

  <a href=""> a link </a>

  </p>"""

需要得到'\nTitle\nA long text........ \n a link \n',可以使用正则表达式匹配,但是稍嫌麻烦,此时可以直接使用BeautifulSoup库进行转化,更加简单,如下:

  

from bs4 import BeautifulSoup

  text = """<p>

  <h1>Title</h1>

  <p>A long text........ </p>

  <a href=""> a link </a>

  </p>"""clean_text = BeautifulSoup(text, "lxml").textprint(clean_text)

打印:

  

Title

  A long text........

   a link

显然,此时已经去掉了字符串中的HTML标签。

  

相关免费学习推荐:python教程(视频)

  

以上就是Python 编程开发 实用经验和技巧大放送的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: