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

[2018.03.11直播] Python之字符串

Kaiser

直播地址:

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'

您也许喜欢这些文章

集智专栏

《机器学习有意思! 01》- 世界上最简单的机器学习入门

发表至趣味项目
本教程适合所有对机器学习感到好奇,却不知从何下手的读者。我想应该有很多人试着读了维基百科页面,然后愈发迷惘、沉沦,盼望着有人能够提供一个high-level的解释,那你找对地方了。
集智专栏

[Scikit-learn教程] 02.03 模型选择:预测器及其参数

发表至系列教程
之前的文档已经介绍了scikit-learn中预测器的基本用法,本篇将深入讨论如何选择合适的模型,以及如何交叉验证(Cross Validation)评估选择的正确性。
集智专栏

《深度学习与图像处理》书籍配套Python教程

发表至数据科学
Python是一款用途广泛的编程语言,配合第三方扩展库(Mumpy, Scipy, Matplotlib)使用,就可以成为科学计算的利器。 本文是斯坦福大学CS228——概率图模型(Probabilistic Graphical Models)的前置Python教程,也是技术图书《深度学习与图像处理》(胡博强 杨培文著)的指定前置阅读材料。

文章评论(4)

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