编码的问题

中文版 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. double四舍五入,商品金额大小写转换,设置货币的小数位数跟格式输出,进制转化

      1:计算double值四舍五入的方法 对小数数值进行四舍五入,首先应该确认保留小数位, 如果数值的小数精度大于保留小数位,那么开始四舍五入计算.四舍五入的方法非常简单,在所有要丢失精度的小数位中加 ...

  2. w3svc服务启动 不了,错误 1068:依赖服务或组件无法启动

    win10系统,装了iis就是启动不了,报错误 1068:依赖服务或组件无法启动. 各种实验无法使用,最后如下方法解决 运行命令regedit,打开注册表编辑器,进入:HKEY_LOCAL_MACHI ...

  3. 转来的emacs配置文件,自动安装插件

    网上转来的emacs配置文件,便于自动安装插件,收藏起来 http://www.gogae.org/post-7/ EMACS是一个伪装成代码编辑器的操作系统. EMACS是一个非常强大的代码编辑器, ...

  4. SQL Server获取月度列表

    -- 获取月度列表 if exists(select 1 from sysobjects where name = 'proc_GetDateMonthList' and type = 'p') dr ...

  5. VBA_Excel_教程:字典类型

    VBA中的字典类型需要添加Microsoft Scripting Runtime引用,在Tools菜单下添加 Sub testDic() Dim strV As String Dim key As S ...

  6. python download

    今天下载 python3 , 从官网下 速度 平均 十几K,网上 搜了下.提供的下载地址 几乎都是 官网的. 于是 下了个 百度同步盘,做 公开分享. 提供给 大家下载,速度 有 300 多K,提高了 ...

  7. nodejs在同一台服务器上部署并同时运行两个或以上服务端时,一个服务用户登录后会挤掉另一个用户的问题

    问题描述:一台服务器,部署了两个或以上不同的Web服务,服务A的用户在登陆后,服务B的用户也登陆,此时服务A的用户在点击页面时,会返回登陆页面. 问题根源:浏览器保存的session相同,即cooki ...

  8. CSS3学习笔记1-选择器和新增属性

    前言:之前自学了一些关于CSS3的知识,在学习过程中也遇到过坑,不过总算磕磕绊绊的学习完了关于CSS3的相关知识,于是最近把之前的笔记和代码整理了一下,也算是一个对CSS3知识的回顾复习吧,也希望能够 ...

  9. 输入m乘法表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Vuejs使用笔记 --- component内部实现

    现在来系统地学习一下Vue(参考vue.js官方文档): Vue.js是一个构建数据驱动的web界面的库,其目标是实现响应的数据绑定和组合的试图组件. Vue.js拥抱数据驱动的视图概念,这意味着我们 ...