集智专栏
资源加载中,请稍后...
集智专栏

[2018.03.11直播] Python之字符串

直播地址:

1. 页内观看(仅视频)


2. 完整观看(可发弹幕):Python之字符串


3. Bilibili直播:Python之字符串



20. 字符串(String)

字符串其实是我们最早接触的数据类型,print("Hello, world!")里的Hello, world!即以字符串形式存在。

程序说明
Hello, world!
示例代码
print("Hello, world!")


20.1 字符串与引号

字符串类型的值都是包含在单引号或双引号当中的,在Python中,单双引号的意义完全一致,需要注意的是:

  • 必须成对使用,不能前面'后面"
  • 必须是西文引号,不能是全角字符


20.2 字符串与列表

字符串与列表很多类似的性质,因为他们都是“序列”,字符串中的“元素”就是一个个字符,包括字母、数字、标点符号以及特殊字符。访问字符串里的某个字符,方法与访问列表元素一样:

name = "Diablo"

# 头文字D
touwenzi = name[0]

与列表一样,字符串的索引是从0开始,-1对应末尾索引,负数索引表示倒数这些性质也是共通的。

Exercise

  • 将字符串变量string的第6个字符赋值给sixth_char
  • 将字符串变量string的最后一个字符赋值给last_char
程序说明
String
示例代码
string = "Excalibur!" # >>>> show me the code <<<< sixth_char = last_char = # >>>> show me the code <<<<
正确答案
sixth_char = string[5] last_char = string[-1]
程序验证过程
sixth_char == 'i' and last_char == '!'
提示信息
string[0] => "E"


20.3 字符串不可变

替换列表中某一元素很容易,只需访问并赋值即可,而相同的操作对于字符串则不可行。字符串值一经生成,就不能再对其中内容进行变更,这与列表截然不同。因此字符串可散列(hashable),可以作为字典的键(key),而列表则不能。

程序说明
字符串不可变
示例代码
yizhao_list = ["传", "位", "十", "四", "阿", "哥"] yizhao_str = "传位十四阿哥" yizhao_list[2] = "于" print("yizhao_list => ", yizhao_list) yizhao_str[2] = "于" print("yizhao_str => ", yizhao_str)


20.4 字符串与循环

字符串不可变更,如果想达到修改的效果,只能生成一个新的。与列表一样,字符串可以进行循环遍历,迭代的单位是字符。

Exercise

  • 想办法传位于四阿哥
  • 字符串没有.append()方法,用加号+就可以拼接
程序说明
传位于四阿哥
示例代码
yizhao_str = "传位十四阿哥" # 生成一个新的变量,暂时是空字符串(只有俩引号) new_yizhao_str = '' for i in yizhao_str: # >>>> show me the code <<<< # >>>> show me the code <<<<
正确答案
for i in yizhao_str: if i == "十": i = "于" new_yizhao_str += i
程序验证过程
new_yizhao_str == "传位于四阿哥"
提示信息
对字符串变量进行+=操作


21. 字符串常用函数

21.1 len()

  • 返回字符串长度(即字符个数)
  • 除了汉字、字母,标点符号也算字符
len("Hello, world!")
# 13


21.2 replace()

  • 替换字符串中的相应字符
  • 接收两个参数,分别是原字符与目标字符
程序说明
又传位于四阿哥了
示例代码
yizhao_str = "传位十四阿哥" yizhao_str.replace("十", "于") print(yizhao_str) print(yizhao_str.replace("十", "于"))


Quiz 12: DNA -> RNA

  • 编写函数dna2rna()
  • 将参数字符串中的T全部替换为U
dna2rna("GACCGCCGCC")
# "GACCGCCGCC"
程序说明
Approach 1
示例代码
def dna2rna(dna): # >>>> show me the code <<<< # >>>> show me the code <<<<
程序验证过程
dna2rna("TTTT") == "UUUU" and dna2rna("GCAT") == "GCAU" and dna2rna("GACCGCCGCC") == "GACCGCCGCC"


21.3 .lower()/.upper()

将英文字符转换为小写/大写

"HHHHH".lower()
# "hhhhh"


"hhhhh".upper()
# "HHHHH"


21.4 .count()

  • 统计字符串中参数字符出现的次数
"banana".count("a")
# 3


Quiz 13. 字符统计

  • 编写函数char_count()
  • 统计参数字符串中所有的字符,并以字典形式输出
程序说明
字符统计
示例代码
def char_count(): # >>>> show me the code <<<< # >>>> show me the code <<<<
正确答案
def char_count(string): return {i:string.count(i) for i in string}
程序验证过程
char_count('aba') == {'a': 2, 'b': 1}


22. ASCII

ord("i")
# 105

chr(105)
# "i"


Quiz 14. 凯撒密表

程序说明
Caesar cipher
示例代码
def caesar_cipher(phrase, shift): input_phrase = phrase.lower() output_phrase = '' # >>>> show me the code <<<< # >>>> show me the code <<<< return output_phrase
程序验证过程
caesar_cipher("alea iacta est", 3) == 'dohd ldfwd hvw'

您也许喜欢这些文章

可视化的神经网络

发表至趣味项目
经过前文的引导,我们现在已经初步理解了神经网络的工作原理,但还是缺乏直观感受。本文则将神经网络的训练和预测过程进行了可视化,让我们可以清晰地观察神经网络的内部究竟是怎样的过程。

Python搭建多层神经网络

发表至趣味项目
上一篇的单神经元网络,只能处理简单的线性问题,一旦相关的输入输出不再一一对应,而是涉及到多个参数的组合,便束手无策了。本篇文章将继续拓展之前的代码,在神经网络中加入隐藏层,使其能够处理非线性问题。

玩儿懂深度学习Part 5:文字的识别与定位

发表至系列教程
这是《玩儿懂深度学习》系列文章的第五篇,以车牌识别(是真的车牌)和简单OCR为例,谈了谈如何进行字母、数字的识别以及定位。

文章评论(4)

谢军 发表于 10天前回复
回复刘锐翔:为什么我按照视频里的凯撒密码代码做,不管输入什么字母都只能输出同一种字母
我是自己建了个26字母的列表。网页端似乎用不了阿斯科码
Sora 发表于 1月前回复
关于字符串的格式化输出我在自己尝试后遇到一个问题:在输入浮点数输出时 "%f岁,学生" % 123231231232131.23 运行后结果是 '123231231232131.234375岁,学生' 在不规定它保留几位小数的情况下,尝试后发现应保留6位且用0来表示,这个4375是什么情况?同样的还有输入 "%.18f岁,学生" % 1.812结果为 '1.812000000000000055岁,学生' 小数点后17位开始出现问题
刘锐翔 发表于 2月前回复
为什么我按照视频里的凯撒密码代码做,不管输入什么字母都只能输出同一种字母
游弋 发表于 2月前回复
Quiz 13. 字符统计 里的char_count()中没有东西 并不完成统计?