用pycharm import出错报错,输出info时出错,把age中的int去掉就没问题了,什么原因

今天闲来无事看了下python基础知识,当学到数据类型转换的int()方法时候。发现了这么一个有意思的事情,算是IDE或是解释器的一个小BUG。(具体原因暂不明,留待以后查找问题)

然后 int()方法的作用

15 #使用int()转换的时候,会强制省略小数点后面的数字

如果用户输入的是正常的不带小数点的整数字符串,那么转换输出没有问题。

当用户输入浮点型字符串后,开始数据类型转换时,出现了这么奇怪的报错:

if int(age)>=18: #这里的age是字符串类型,但是在条件表达式中是作为数字对待的 #执行以上参数后,输入值15.6,出现以下报错(不光是输入带小数点的数字字符串,只要是非整数以外的字符,均会报错)

可是情况1输入小数点的数字转换的时候是没有问题的。问题出在哪呢?

通过百度找到了解决方法

当输入带有小数点的字符串的时候,不会再出现值错误的报错。(但是乱输入非数字符号还是会报错)。但是打印totalConunt,你会发现这种方式不光去掉了字符串age中带的非数字字符和空值,连小数点就去掉了。

你会发现输入小数点又可以了。又不会报错了。

初步推测,int()函数能转换纯整数数字的字符串,不带小数点的(带小数点就会报错。int(方法应该是认为小数点不属于纯整数范畴))。float()能转换纯整数数字字符串或带小数点的纯浮点数字符串。

Framework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。

l 服务器软件(网络软件).Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。

l 游戏。很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。



l 宁缺毋滥的使用括号.除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是可以的.

4个空格来缩进代码.绝对不要用tab, 也不要tab和空格混用.

l 顶级定义之间空两行. 方法定义之间空一行.顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行.

l 按照标准的排版规范来使用标点两边的空格.不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾). 参数列表, 索引或切片的左括号前不应加空格.在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=,

l 块注释和行注释.最需要写注释的是代码中那些技巧性的部分.如果你在下次 代码审查 的时候必须解释一下,那么你应该现在就给它写注释.对于复杂的操作,应该在其操作开始前写上若干行注释.对于不是一目了然的代码,应在其行尾添加注释.为了提高可读性,注释应该至少离开代码2个空格.

如果一个类不继承自其它类, 就显式的从object继承.嵌套类也一样.

l 每个导入应该独占一行.导入总应该放在文件顶部.例如:

l 通常每个语句应该独占一行.

所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.

用双下划线(__)开头的实例变量或方法表示类内私有.

将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.

对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.

    常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

  1 使用python编写的代码(.py文件)

  2 已被编译为共享库或DLL的C或C++扩展

  3 包好一组模块的包

  4 使用C编写并链接到python解释器的内置模块

2、为何要使用python模块

        如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

        随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

2、导入模块下的某一个功能

4、本文写道的基础常用模块说明

2、显示扑克牌的花色和数字
d = defaultdict(lambda :5) #定义一个默认value的字典,这里定义的默认value为(匿名函数的返回值是5),默认值必须是可以调用的类型,如:列表、字典、元组、匿名函数 print(d['k']) #之前没有给d这个字典里写入键值,但是此时调用d这个字典下的k这个键,会打印出对应的值为:5

 (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型。是给计算机看的
(2)格式化的时间字符串(Format String): ‘’:给人看的
(3)结构化时间(struct_time)以元组的形式显示 :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等),计算用的
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
 1、时间戳、字符串格式时间和结构化时间
time.sleep(1) #暂停一会,可以指定停多长时间(单位是秒)
2、单独获取结构化时间的某一个元素
3、时间之间的转换:时间戳和字符串格式的时间是不可以直接转换的,他们之间的转换需要通过结构化的时间来进行时间转换
1、时间戳和结构化时间的转换
print(time.gmtime(t)) #将时间戳转化为格林威治的格式化时间(中国比格林威治的时间快八个小时)
 
3、随机选择返回一个值
#接收参数脚本示例:该内容需要在系统里执行,执行命令:python script-name 参数1 参数2

os模块是与操作系统交互的一个接口

#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

python里的三个序列化的模块:


 #json -- (五星):通用的序列化格式,基本上所有的开发语言都用的序列化格式(只有很少的一部分数据类型能够通过json转化成字符串)
#pickle -- (四星):python独有的序列化类型,所有python中的数据类型都可以转化成字符串形式,pickle序列化的内容只有python能理解,部分反序列化依赖python代码。
#shelve -- (三星):python3的新模块,序列化句柄(使用句柄直接操作,非常方便)
 #从数据类型 --> 到字符串的过程叫作序列化(为了方便存储和网络传输)
#从字符串 --> 到数据类型的过程叫作反序列化

    dumps和loads是再内存里对数据类型进行序列化,然后显示出来!!

注:json支持序列化的类型有:数字、字符串、列表、元组(元组是序列化成列表,反序列化也是反序列化成列表)

    dump和load是将序列化的类型写入到文件里,然后从文件里读取出来进行反序列化,json的load不可以多次load。

2.1、当遇到中文时使用dump将序列化后的值写入到文件里时,查看文件出现bytes类型的乱码的解决办法(不影响load反序列化)
问题:dump和load可不可以按行写入到文件里,然后按行读取?

答:不可以,具体看如下代码

现在有需求需要实现序列化后的数据按行写入文件然后在按行读取出来如何实现?看下面代码:

这样就实现了序列化后的数据按行写入到文件,然后再按行读取的功能了!!

3、json的一些其他参数说明
注:pickle对文件的操作都需要加b,因为pickle是序列化为bytes类型,pickle支持分次从文件里load内容并进行反序列化
existing = f1['key'] #获取数据的时候也只需要直接用key获取即可,但是如果key不存在会报错

2、shelve模块的小问题(以只读的方式打开文件还可以直接对文件进行修改)

来源于网友分享,如有不妥联系删除

我要回帖

更多关于 pycharm import出错 的文章

 

随机推荐