#1 基础语法:数据类型,逻辑操作等

一.输入和输出, 以及格式控制

输出print()

print 遇到逗号','会输出一个空格

>>> print('hello', 'python', 'world')
hello python world

输入input()

可以将输入的值赋给一个变量

# 声明变量名name
>>> name = input()
james

>>> name
'james'

格式控制符

这一点和c语言基本一致:

  • '%s': 表示字符串类型输出控制
  • '%d': 表示整数类型
  • '%f': 表示浮点类型
  • '%%':表示 %,相当于转义

当然也可以对输出的类容进行进一步的控制:

  • '%2d': 如果只有1位数,前面用空格补齐
  • '%02d': 如果只有1位数,前面用0补齐
  • %.2f: 保留2位小数
  • float('{0:.2f}'.format(x)): 保留2位小数

示例:

>>> '%2d-%02d' % (3, 1)
' 3-01'

>>> '%.2f' % 3.14156
'3.14'

>>> float('{0:.2f}'.format(3.141569))
3.14

二.代码规范

python中使用 # 作为注释的标志

当语句以: 结尾时, 使用缩进表示代码块,一般采用4个空格作为规范,不要混用Tab和空格,否则在不同的编辑器中可能结果不一样

a = -12
if a >= 0:
    print(a)
else:
    print(-a)

三.数据类型

1.布尔值

python中bool值使用 TrueFalse 表示, 注意首字母大写!!!

>>> True
True

>>> 3 < 2
False

2.list 类型 (相当于数组)

定义方式:

>>> names = ['kobe', 'durant']

>>> len(names)
2

元素类型和js一样,可以是不同类型的:

>>> things = ['apple', 4, ['great'], True, None]

索引和javascript的不同,js中访问不在范围内的索引不会报错,给出undefined,而python中会报错;另外python中可以使用 '-1' 表示最后一个元素,倒着取出元素:

>>> names[3]
IndexError: list index out of range

>>> names[-1]
'durant'

>>> names[-2]
'kobe'

# 倒着数超过界限也会报错
>>> names[-2]
IndexError: list index out of range

方法

  • append(): 再后面添加一个元素,js中使用push
  • insert(index, element): 在指定的索引位置插入元素,和js中的splice有点像
  • pop([index]): 这个删除元素,并且返回被删除的元素, 索引参数可选,即删除指定索引位置的元素,这个和js类似,但是更强大一点
  • del: 直接删除该元素,比如 del names[1]
  • remove(value): 根据list中的值来删除该元素 names.remove('kobe')
  • sort(): 排序(默认为升序)
  • reverse(): 反序
# 尾部添加
>>> names.append('james')
['kobe', 'durant', 'james']

# 指定位置插入insert()
>>> names.insert(1, 'harden')
['kobe', 'harden', 'durant', 'james']

# 删除尾部元素
>>> names.pop()
['kobe', 'harden', 'durant']

# 删除指定索引位置上的元素
>>> names.pop(0)
['harden', 'durant']

>>> len(names)
2

# 直接删除该元素
>>> del names[1]
['harden']

# 根据值来删除
>>> names.remove('harden')
[]

# sort()排序
# sort(reverse=False) 可选参数reverse默认值为False
>>> s = ['c', 'a', 'b']
>>> s.sort()
>>> s
['a', 'b', 'c']

3.tuple 元组

这个和list很像,也是有序列表,tuple一旦初始化就不能修改,所以没有list上面的方法,声明方式有点奇怪,使用(), 获取元素还是使用索引[]

>>> names = ('kobe', 'durant')
>>> names[0]
'kobe'

注意陷阱:当元组中只有一个元素时,会和其它的一些声明产生冲突,比如

# 结果声明的是数值类型
>>> numbers = (1)
>>> numbers
1  

# 结果声明的是字符串类型
>>> names = ('james')
>>> names
'james'

为了避免冲突,在单个元素声明可以再后面添加一个逗号',':

>>> numbers = (1,)
>>> numbers
(1,)

>>> names = ('james',)
>>> names
('james',)

# 声明一个空的元组
>>> t = ()
>>> t
()

当然不能该表是指的是指向的指针不能改变:

# 元组的第3个元素是list
>>> t = ('a', 'b', ['c', 'd'])
>>> t[2][0] = 'x'
>>> t[2][1] = 'y'
>>> t
('a', 'b', ['x', 'y'])

3.dict: 字典

这个类型相当于js中的Map数据类型,使用键值对,具有很快的查找速度,相应的会占用大量的内存。

值得注意的是

  • dict内部的存放顺序跟key的放入顺序是没有关系的
  • 存放的key必须是不可变对象,比如数值类型和str类型,list类型则为可变类型,不用作key
>>> dic = {'kobe': 80, 'james': 90}
>>> dic['kobe']
80

如果一个key不在字典里面,直接选取会报错,所以取之前应先判断字典中是否存在该key,有2中方法:

  • someKey in dic: 返回布尔值,这点和js中的用法很像
  • dic.get(someKey,[selfDefineReturnValue]): 如果key不存在则返回None,或者自定义返回值
# 读取不存在key,会报错
>>> dic['jordan']
KeyError: 'jordan'

# 使用 'in' 判断
if 'jordan' in dic
  print(dic['jordan'])
else:
  print('there is no jordan in dic')

# 使用 'get()' 方法判断
>>> dic.get('jordan')
None # 当然一般不会显示None

# 自定义返回值
>>> dic.get('jordan', -1)
-1

方法

  • pop(key) 删除某个键值对
  • update({key: value}): 添加新的键值对
# 删除某个key
>>> dic.pop('james')
>>> dic
{'kobe': 80}

# 添加新的key-value
# 第一种当然是直接添加
>>> dic['jordan'] = 100
{'kobe': 80, 'jordan': 100}

# 使用update()进行添加
>>> dic.update({'wesbrook': 120})
>>> dic
{'kobe': 80, 'jordan': 100, 'wesbrook': 120}

4.set 类型

这个类型和js中的Set类型一样,存入一组key的集合,set中没有重复的key,创建set:

# 传入list作为参数
s = set(list)

>>> s = set([1, 2, 3, 3])
>>> s
{1, 2, 3}  # 除去重复的key

方法:

  • add(key): 添加key
  • remove(key): 删除key
  • &: 求2个set集合的公共部分
  • |: 求2个set的并集
  • -: 这个是操作符重载的方法,第一个set将2个set中相同的部分去掉
# add(key)
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> s
{1, 2, 3, 4}

# remove(key)
# 当然如果key不存在会报错
>>> s.remove(4)
>>> s
{1, 2, 3}

# 求交集
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}

# 求并集
>>> s1 | s2
{1, 2, 3, 4}

# 第一个set 去除2个set之间共同的部分
>>> s1 - s2
{1}

逻辑操作符

python中也有3种,使用 and, or, not 表示

>>> 1 > 2 and 3 > 2
False

空值

空值使用 None 表示

四.运算逻辑

除法

除法计算结果为浮点数,即使两个数恰好整除

>>> 9 / 3
3.0

地板除法 //:相当于除完之后再使用'Math.floor()'一样, 得到的永远都是整数

>>> 10 // 3
3

条件语句

python的条件语句和其它语言有所不同,采用下面的格式:

if a:
  ....
elif b:
  ....
elif c:
  ....
else:
  ....    

注意 : 不能省略, else if 简写为 elif

a = 10
if a >= 90:
  print('优秀')
elif a >= 80:
  print('良好')
elif a >= 60:
  print('及格')
else:
  print('不及格')

x 为 非零数值, 非空字符串, 非空list等,下列判断返回True, 否则false

if x:
  print('True')

循环语句 for...in...:

for...in后面不要忘记表示块状语句的 冒号':'

>>> names = ['kobe', 'durant', 'james']
>>> for name in names:
>>>     print(name)
'kobe'
'durant'
'james'

range()

这个数学函数表示一个区域,默认起始为0,比如可以将range区域生成一个有序的list

>>> list(range(5))
[0, 1, 2, 3, 4]

计算 0-100的和,可以这样写:

>>> sum = 0
>>> for x in range(101):
>>>     sum += x

>>> print(sum)  # 5050

另一种循环的方式是使用 while 语句

# 求0-99之间奇数的和
sum = 0
n = 99
while n > 0:
  sum += n
  n = n -2
print(sum)  # 2500

和循环一起的还有break, continue

break 表示退出循环, continue表示跳过满足条件的当次循环,这个所有语言都是一致的

# break
n = 1
while n < 10:
  if n > 5:
    break
  print(n)  
  n += 1

# continue
n = 0
while n < 10:
  if n % 2 == 0:
    continue
  print(n)
  n += 1  

五.字符编码和格式化

  • 最原始的是采用 ASCII 编码,1个字节,但是只能表示 '0-127' 之间的字符
  • unicode 编码,则将所有编码进行统一,2个字节
  • UTF-8 编码,由于英文字符只需要1个字节,使用unicode对全英文字母会造成浪费,'UTF-8'对于英文一般是1个字节,对于中文一般是3个字节,可以说'UTF-8'编码包含了'ASCII'编码

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者传输时就转换为UTF-8编码;而在浏览网页时,服务器会把动态的Unicode内容转换为UTF-8再传输到浏览器

python的字符串str

对于当个字符,python提供了2个方法:

  • ord(): 获取单个字符,转换为整数表示,相当于js中的 charCodeAt() 方法
  • chr(): 将编码转换为对应的字符,相当于js中的 String.fromCharCode()
>>> ord('A')
65

>>> chr(66)
'B'

其它字符串方法:

  • int(): 将整型数字字符串转换为整型
  • float(): 将浮点数字字符串转换为浮点数
  • str(): 转换为字符串
  • replace(): 将某个值用另一个值取代,纯函数,实际上是生成了一个新的字符串
a = input('enter a integer num: ')
s = int(a)
if a > 10:
  print('num greater than 10')


# replace()
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> a
'abc'
>>> b
'Abc' # 可以看出来replace()实际上是生成了另一个字符串

bytes 单位

在python中字符串类型是 str, 在内存中以Unicode表示,一个字符由多个字节组成。在网络或者磁盘中保存时,需要把 str 变为以字节为单位

python对 bytes 类型的数据用带 b 前缀的单引号或双引号表示:

x = b'ABC'

注意 'ABC'b'ABC' 的区别:前者为str,后者和前者显示的内容一样,当时bytes的每一个字符只占用1个字节

encode() 和 decode()

编码及解码,可以使用 'encode()'方法编码为指定的bytes

>>> 'ABC'.encode('ascii')
b'ABC'

>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

我们从网络或者磁盘上读取的字节流,读到的数据是bytes,将bytes变为str,需要使用 decode()

>>> b'ABC'.decode('ascii')
'ABC'

len() 计算str的字符数或 bytes的字节数

比如:

# 以str计算字符数
>>> len('ABC')
3

# bytes字节数
>>> len(b'ABC')
3

>>> len('中文')
2

# 转换为utf-8编码
>>> len('中文'.encode('utf-8'))
6

一个中文字符经过UTF-8编码后通常占用3个字节,在操作字符串时,我们经常遇到 strbytes 的相互转换,为了避免乱码,应坚持使用 UTF-8对2者进行转换,可以在文本的开头写上下面这句注释:

# -*- coding: utf-8 -*-

总结

本章主要是python的基本语法,学习起来也比较简单,和其它语言差别也不是很大,就是书写规范上有所不同,主要有以下几个方面的内容:

  • input(), output()函数,及其格式控制符
  • 数据类型:数值类型,布尔类型(True和False),空值类型None 字符串类型str, list(类似array), tuple(元组), dict(字典类型,键值对,类似Map), set(类似Set类型), 以及各数据类型对应的方法
  • 逻辑操作:条件语句(if...elif...else), 循环语句(for...in, while, break, continue)
  • 逻辑运算符:使用英语 and or not 3个关键词
  • 块状语句使用 : 和 缩进表示
  • python中字符串编码问题
  • 常用函数:len(), ord(), chr(), range()等

本文参考廖雪峰老师python教程的学习总结,更多参考 廖雪峰python

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 12,887评论 0 13
  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 5,879评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,282评论 0 11
  • 菩叶生阅读 2,425评论 0 0

友情链接更多精彩内容