编码的问题

中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码。

Unicode, UFT-8, GBK 分别是三种不同的编码,Unicode在转为UTF-8或GBK时需要经过编码的过程,而UTF-8或GBK变为Unicode则需要经过解码。因此UTF-8和GBK的转化就需要经过一个解码和编码的过程。所以即使我们在py文档里注明了使用utf-8编码,在默认使用gbk的终端里,出现的中文是会乱码的。

因此,在中文windows终端运行python2文件,我们需要对内容先解码再编码,如下: 这样以后我们在终端看到的就可以是正确的中文字了 (使用decode()和encode()先将内容从utf-8解码,然后再编码为gbk显示)

在python3里,python编码做了优化,自身转化utf-8, unicode, gbk, 移除了python的utf-8类型

**Q: python3里的文本都可以正常显示在终端里,在使用python2.7的Ubuntu里,直接print的中文正常显示,而decode再encode的中文字符反而乱码了。TBD

naomi@ubuntu:~/Desktop$ cat test
#!/usr/bin/python
# -*- coding:utf-8 -*- val = '中文咯'
val_unicode = val.decode('utf-8')
val_gbk = val_unicode.encode('gbk')
print(val_gbk) print('这也是中文')

运算符

'//' 取整

使用PyCharm IDE来创建Python项目文件,设置默认模板(Files - Settings - Editor - File and Code Template 在python文件里添加 #!/usr/bin/python 设置即可)

python2里的'/'除法不显示小数的问题,可以通过from __future__ import division 来得到小数结果

PyCharm里p2和p3的切换:files - settings - 目标project - interpreter 选择p3即可

成员运算符

in

not in

str1 = 'big brother is watching you'
text1 = 'big' in str1
text2 = ' ' in str1
text3 = 'isw' in str1
text4 = 'ther' in str1 print(text1) # True
print(text2) # True
print(text3) # False
print(text4) # True list1 = ['big', 'brother', '', 'watching', ' you'] text5 = 'big' in list1
text6 = ' ' in list1
text7 = 'ther' not in list1 print(text5) # True
print(text6) # False
print(text7) # True

身份运算 [TBD]

基本数据类型 [每个数据类型的功能可以通过在pycharm里按ctrl点击要further的内容找到reference]

数字    int

字符串 str

布尔值 bool

列表    list

元组    tuple

字典    dict

查看对象的类,或对象所具备的功能

.type() 可以获取每个变量的数据类型

.dir() 可以获取某个变量所具备的所有功能

.help('类') 查看某个类的具体方法及其用法

a = 'andy'

print(type(a))  # 得到结果 <class 'str'>
print(dir(a)) # 得到字符串 a 所具有的所有方法 b = help(a) # 显示'andy' 字符串并没有python文档 c = help(type(a)) # 显示 字符串 类 的所有信息(包括方法的解释说明)

基本数据类型的常用功能

1. 整数int型

number1 = 1
number2 = 2 print(number1 + number2) # 效果和下面一行一样。本质是调用了number1的__add__()方法先进行了转换
print(number1.__add__(number2)) # bit_length()表示某个整数的二进制至少占几位
# 如下面计算数字的二进制占位 number3 = 4 #
number4 = 1024 #
print(number3.bit_length()) # 结果3, 至少占3位
print(number4.bit_length()) # 结果11, 至少占11位

2. 字符串str型

s1 = 'andy'

# 字符串改为首字母大写
print(s1.capitalize())
# Andy # 将字符串按照指定长度居中,空白按需补足
print(s1.center(20,'*'))
# center()方法第一个参数是设置总字符串长度,第二个参数用于填充空白
# ********andy******** # 数出子字符串在字符串中出现的次数
s2 = 'andy dufresne stands for hope'
print(s2.count('a'))
print(s2.count('e'))
# 计算'a'在s2字符串里出现的次数 结果为 2
# 计算'e'在s2字符串里出现的次数 结果为 3
print(s2.count('d', 0, 4))
# 数出'd'在s2字符串从第1到第4位置出现的次数,结果为 1 # 判断字符串是否以某子字符串结尾
print(s2.endswith('e'))
print(s2.endswith('hope'))
print(s2.endswith('a'))
# 判断是否以特定字符串结尾 结果分别为True, True, False
print(s2.endswith('dy',0,4))
# 还可以指定字符串的起始和终止位置,如上例,判断s2字符串第一到第四位字符串是否以'dy'结尾,结果返回True # 将tab转为8个空格
s3 = 'hello\tworld'
print(s3.expandtabs())
print(s3.expandtabs(20))
# expandtabs() 方法将字符串里的tab自动转为空格,默认转8个空格,在参数里可以指定空格数量
# 由于编译器可能会自动将键盘输入的tab键转为空格,我们可以通过'\t'来确定输入的tab # 在字符串里找到子序列并返回位置
print(s3.find('he'))
print(s3.find('l'))
print(s3.find('n'))
# find()方法在s3字符串里顺序查找'he', 'l', 'n',一旦找到就返回起始位置,且仅返回第一个找到的字符串的位置。
# 如果说s3里没有想要查找的字符串,结果返回-1
# 上例结果分别为0, 2, -1 # format()字符串格式化,动态参数
s4 = 'hello {0} from {1}'
s5 = s4.format('bender', 'futurama')
print(s5)
# s4里的{0}, {1}相当于是一个placeholder,利用format可以按序输入参数
# 如上例结果就是 hello bender from futurama # index() 找到子序列的位置,如果没有找到,报错
# 类似 find()功能

str1

查看源码来看一个方法是否需要传入参数,传入几个参数。如果源码里只有(self),则不需要传参数
功能里参数输入的地方(self, arg0, arg1 = None, arg2 = None)以左为例,最多传3个参数,第一个参数arg0必传, 第二个和第三个参数默认为None,可以不传也可以传

s6 = 'andY56'
print(s6.isalnum()) # 判断字符串是否全是字母和数字
print(s6.isnumeric()) # 判断是否去哪是数字 False
print(s6.isalpha()) # 判断是否全是字母 False # isspace() 确定是否所有都是空格
space1 = ' \t \n '
print(space1.isspace()) # 判断是否所有都是空格 True # istitle() 确定一个字符串是否为标题
title1 = 'The School'
title2 = 'Old McDonald Has a Farm'
print(title1.istitle()) # 判断是否是标题,所有单词首字母大写,且其他字母小写
print(title2.istitle()) # McDonald人名出现两个大写判断为False, 冠词a首字母没有大写判断False,所以其实这个方法并不能真实判断一个字符串是否为标题 # join方法将可迭代的参数通过指定的字符连接起来
# 如下,将一个list通过' '空格或者 '***'连接起来 同样适用于元组
list1 = ['kenny', 'is', 'mysterion']
joint1 = ' '
joint2 = '***'
print(joint1.join(list1)) # kenny is mysterion
print(joint2.join(list1)) # 得到结果kenny***is***mysterion # ljust() 内容左对齐,可以指定长度,右边按需填充
str1 = ' well this is embarrassing'
print(str1.ljust(30), '---')
# 得到结果 well this is embarrassing ---
# 指定长度如果超过字符串长度,超过的部分为空格,然后在后面再添加'---',如果指定宽度小于字符串,则将字符串输出完毕后再加上添加的'---'
# 如果改为rjust, 则变为右对齐 # strip(), lstrip(), rstrip() 分别去除字符串两边的空格,左边的,右边的
str2 = ' obviously this is a test '
print(str2.strip()) # 结果为'obviously this is a test'
print(str2.lstrip()) # 结果为'obviously this is a test '
print(str2.rstrip()) # 结果为' obviously this is a test' # partition() 将字符串分割为前,中,后三个部分
str3 = 'knock knock knock '
print(str3.partition('ock'))
# 结果为 ('kn', 'ock', ' knock knock ') # replace() 输入需要替换的内容,替换后的内容,替换的次数(不输入默认全部替换)
print(str3.replace('kn', 'kk')) # 结果 kkock kkock kkock
print(str3.replace('kn', 'kk', 2)) # 结果 kkock kkock knock
# 输入数字超过3 以及负数,发现结果是全部都替换了
# 输入数字0,则没有替换 # split() rsplit() 将字符串按照要求分割
str4 = ' split this sentence '
print(str4.split()) # 不指定的时候,按照空格分隔 ['split', 'this', 'sentence']
print(str4.rsplit('i')) # 出现'i' 就分割一次
print(str4.rsplit('e',2)) # 从右边开始看到'e'分割,一共分割两次 # 在stackoverflow 里看到有人问split()和rsplit()的效率问题,通过timeit()测试得知这两个方法的速度差不多(split()略快一点点可以忽略不记),不过rsplit()还需要多打一个'r',所以看来如果满足同样的需求采用split()即可 # splitlines() 根据换行符分割
str5 = '''remember
remember
the fifth of November\n hmm \n not funny actually \nbummer'''
print(str5.splitlines())
# 得到结果 ['remember', 'remember', 'the fifth of November', ' hmm ', ' not funny actually ', 'bummer'] # swapcase() 改变大小写
str6 = 'Ah.... The FrAy aNd ColdPlay'
print(str6.swapcase()) # 得到结果 aH.... tHE fRaY AnD cOLDpLAY # title() 自动变成title 格式
print(str6.title()) # 结果 Ah.... The Fray And Coldplay

字符串索引

string[0], string[-3]

字符串切片

string[2:], string[2:12], string[-3:]

for 循环

for item in string:

  print(item)

依次输出string里的内容

for循环液可以搭配break, continue 来使用

# string的索引,切片
str7 = 'string_example'
print(str7[-3:])
print(str7[3:])
print(str7[:]) str8 = 'python'
for i in str8:
print(i)
'''
得到结果:
p
y
t
h
o
n
'''

【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1的更多相关文章

  1. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  2. Python全栈day 01

    Python全栈day 01 一.计算机认识 用户 软件,类似微信.QQ.游戏等应用程序,由程序员编写,在系统中运行,完成各种活动,方便人们使用. 操作系统,主要分为windows系统.Linux系统 ...

  3. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  4. Python全栈day21-22-23(模块)

    一,python的模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...

  5. Python全栈开发:模块

    模块,用一砣代码实现了某个功能的代码集合. 参考资源:http://www.cnblogs.com/alex3714/articles/5161349.html 类似于函数式编程和面向过程编程,函数式 ...

  6. 【Python全栈笔记】03 [模块二] 16-17 Oct 函数

    定义一个函数 def function_name(形式参数): 代码块 return 'Value' #如果没有写return,则默认返回None # 一个函数到return这一行就结束执行了,在re ...

  7. 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数

    lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...

  8. 【Python全栈笔记】08 [模块二] 20 Oct 递归 -*** 待补充

    递归 引入 递归的表现形式 下面是四个函数,互相调用返回结果 # 引入 递归的表现形式 def f1(): ' def f2(): r = f1() return r def f3(): r = f2 ...

  9. 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作

    文件操作 一般步骤1. 文件打开 2. 文件操作 3. 文件关闭 1. 打开文件 使用open(文件名(绝对路径), 打开模式, 编码) 文件打开的模式有: r:  只读模式(默认) w: 只写模式 ...

随机推荐

  1. win32+ apache2.2 + tomcat7配置

    首先已安装了apache2.2.22与tomcat7,并下载了相应的连接器文件mod_jk.so,存放于apache目录的modules下.我的电脑的安装路径如下:1.D:\server\Apache ...

  2. spring+ibatis整合

    一.pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

  3. php+mysql预查询prepare 与普通查询的性能对比

    prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...

  4. Xilinx DCM 使用---- 输出频率问题

    最近在使用Xilinx FPGA验证项目,使用DCM将50M晶振分频得到20M时钟.但是下载代码到板子上验证,发现板子完全不工作. 然后 测量时钟,发现根本就没有20M时钟.查找资料,以及跟以前项目对 ...

  5. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  6. Find out files transfered via Bluetooth

    The case was about business secret and forensic guy did a physical acquisition from a smart phone. H ...

  7. 判断是手机还是PC端访问

    /*判断手机*/ //判断是手机浏览还是pc //平台.设备和操作系统 var system = { win: false, mac: false, xll: false, ipad: false } ...

  8. 这几天帮一个朋友解决了一点小问题(RF的有些小问题及解决过程)

    最近涉猎自动化太少了,以至于都不经常更新了.最近一个朋友在做移动端自动化的时候遇到了一些小问题来找我解决.本人也不是很精通,只是接触的时间长了一点了.下面就是一些问题和解决过程: 1.她刚过来的时候, ...

  9. Asp.net 未处理异常

    页面级捕获未处理异常 - Page 的 Error 事件 Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.Even ...

  10. 常用的dos命令

    cd 进入一个目录 cd .. 返回上一个目录 dir 遍历目录 上下键 查找输入过的命令 Tab键 命令自动补齐