初学python 记录一些易错点

1.区分字符串与数值

话说在c语言这个强类型语言中,各变量类型被强制的区分开来,类型转换工作也必须由程序员显式完成,所以c语言的字符串与数值自然能区分的很清楚。

不过在弱类型的语言中,许多麻烦的类型转换操作解释器都会偷偷地帮你完成了。尤其是php,那叫一个方便简单,纯数字组成的字符串能直接与数值相加,实际用起来,我们经常没有注意到纯数字的字符串与数值没有什么区别。

1 <?php
2 $a1="5"+8;
3 $a2=5+"8";
4 $a3=5+8;
5 $a4="5"+"8";
6 //上面四句表达式的值,结果是一样的

因为php的解释器会按照需要自动的转换字符串类型和数值类型。在php中,加号+就是相加,管你是字符串还是数值,并且额外弄了个点号.表示字符串连接。

再看python中,加号放在字符串之间,表示的是字符串连接,放在数值之间,才表示相加。

所以,一个经常犯的错误就出现了,看如下代码:

1 num1=input("请输入第一个数字:")
2 num2=input("请输入第二个数字:")
3 sum=num1+num2
4 print("这两个数之和是:",sum)

原因在于input()返回的是一个字符串类型。我们可以在交互窗口试一试:

Type "help", "copyright", "credits" or "license" for more information.
>>> a=input("enter a num")
enter a nume
>>> a=input("enter a num\n")
enter a num
3
>>> a
‘3‘
>>>

因此,我们使用input()函数输入后得到的其实是一个包含数字的字符串。

那么使用加号表示将这两个字符串合并,‘3‘和‘2‘合并自然是‘32‘了。

所以,以后如果想使用input()函数输入一个数值,在得到结果后一定要记得使用int()将字符串类型转换为数值类型,否则会出现莫名其妙的问题!

2.空格和制表符

试试在一个正常的语句前面加上一个空格?

在其他如c语言中,这么做一点影响都没有。

但是在python中,这么做解释器会报错:IndentationError: unexpected indent

具体细节我也不是很清楚,目前猜测是解释器故意这样干的,目的是强制程序员养成良好的编程习惯,类似于强制缩进这种做法。

3.函数默认参数务必使用不可变对象

留个坑,以后补充

时间: 2024-09-30 09:40:56

初学python 记录一些易错点的相关文章

python --for else易错逻辑分析

#+============错误逻辑l=[1,2,3,4,5]n=int(input('please input'))for i in l:if n==i:print('exist')else:print('not exist')#============标志位修改flag=0for i in l:if n==i:flag=1if flag==1:print('exist')else:print('not exist') #+===========for else 修改for i in l:if

【初学python】错误SSLError: [Errno 1] _ssl.c:504:的解决记录

最近在实习公司学习使用python做web自动化测试,其中使用到httplib这个模板,主要用于与待测试界面建立HTTP连接,发送数据请求,接收请求状态码和查询数据,验证功能.但是新版本的web界面改成使用https协议,原来的测试用例都变成无法跑通的状态. 将协议从HTTP改成HTTPS后,报以下错误: SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown proto

软考程序员新手易错笔记

1.●标准化对象一般可分为两大类:一类是标准化的具体对象,即需要制定标准的具体事物:另一类是  (4)  ,即各种具体对象的总和所构成的整体,通过它可以研究各种具体对象的共同属性.本质和普遍规律. (4) A.标准化抽象对象    B.标准化总体对象    C.标准化虚拟对象    D.标准化面向对象 [解析]:标准化对象一般可分为两类:一类是标准化的具体对象:另一类是标准化的总体对象. 2.●用二进制加法器对二-十进制编码的十进制数求和,当和大于1010时,  (5)  . (5) A.不需要

关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇: 组合逻辑输出类型选择; 语法上的变量交换; ·易忘篇: case/casex/casez语句; 循环语句: 数制和操作符: 数据类型: ·易错: 技巧篇: 1.组合逻辑输出:描述一个纯组合逻辑电路时,尽量不要把输出定义成输出类型,例如描述下面的电路: 1 module mux #(paramet

[SQLXML]FOR XML语法导出XML的易错之处

原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 2006-6-29 郑昀@Ultrapower 草稿 继续阅读之前,我们假设您熟悉以下知识: n         MS SQL Server 2000 n         Sp_makewebtask n         FOR XML 子句 如果不熟悉这些知识点,可以看下面两小节[准备工作一:FO

初学Python(三)——字典

初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:"age",3:"sex"} #d[1]中的1代表的不是下标值,而是key值 print d[1] #添加值 d[4]="addres" print d #更新值 d[4]="address" print d #当key值不存在时,这个时候用

初学python命名空间和LEGB原则

Python的命名空间是一个字典,字典内保存了变量名称与对象之间的映射关系,因此,查找变量名就是在命名空间字典中查找键-值对,想要打印出全局变量与局部变量的字典映射,我们可以使用函数globals()和locals().Python有多个命名空间,因此需要有规则来规定,LEGB就是用来规定命名空间查找顺序的规则,顺序为:local-->enclosing function locals-->global-->builtin. LEGB原则如下: 函数中变量命令空间易错点: 1.pytho

初学Python常见异常错误,总有一处你会遇到!

初学Python常见错误 忘记写冒号 误用= 错误 缩紧 变量没有定义 中英文输入法导致的错误 不同数据类型的拼接 索引位置问题 使用字典中不存在的键 忘了括号 漏传参数 缺失依赖库 使用了python中对关键词 编码问题 1. 忘记写冒号 在 if.elif.else.for.while.def语句后面忘记添加 : age = 42 if age == 42 print('Hello!') File "<ipython-input-19-4303141d6f97>", l

python记录点

python记录点 文件编码 Unicode使用最少2个字节(1个字节=1BYTE=8bit=一个长度为8的二进制数) 来表示字母和符号等,有时候是4个字节. UTF-8是对Unicode编码的压缩和优化,最大的特点是它采用了变长的编码方式,他不再是最少使用2个字节,而是将所有的字符进行分类.ascii码中的内容用1个字节保存.欧洲的字符用2个字节保存,东亚的字符用3个字节保存… 不同编码之间的关系 python2中文件的默认编码为ASCII,在文件中含有中文的时候就会报错,这时,我们需要是设置