字符串计算
字符串计算
文本数据 ·计算机应用 -科学计算 一信息管理 ·信息管理中大量的数据都是文本数据. 一如:姓名,地址,简历等等 一小测验:身份证号码,电话号码等是数值? ·计算机中用字符串来表示文本数据. Lu Chaojun,SJTU 2
文本数据 • 计算机应用 – 科学计算 – 信息管理 • 信息管理中大量的数据都是文本数据. – 如:姓名,地址,简历等等 – 小测验:身份证号码,电话号码等是数值? • 计算机中用字符串来表示文本数据. Lu Chaojun, SJTU 2
字符串类型 。字符串:字符序列 ·字符串字面值:用一对引号(单/双/三)括住. 'hello world' "~!@#$号^&*" "汉字也是字符" line one, line two line one line七wo""" Lu Chaojun,SJTU 3
字符串类型 • 字符串:字符序列 • 字符串字面值:用一对引号(单/双/三)括住. 'hello world' "~!@#$%^&*" "汉字也是字符" '''line one, line two''' """line one, line two""" Lu Chaojun, SJTU 3
字符的转义 ·字符串本身含有引号怎么办? 一含有单引号:串用双引号括住 "I'm a student. 一含有双引号:串用单引号括住 'He said "I am a student"to the teacher. 一两者都有: He said,"I'm a student."这个串该用什么引号呢? ·更一般的做法:用escape-字符1来转变字符含义 "He said,\"I'm a student. -以后会学到其他一些字符的转义情形 Lu Chaojun,SJTU 4
字符的转义 • 字符串本身含有引号怎么办? – 含有单引号:串用双引号括住 "I'm a student." – 含有双引号:串用单引号括住 'He said "I am a student" to the teacher.' – 两者都有: He said, " I'm a student."这个串该用什么引号呢? • 更一般的做法:用escape字符\来转变字符含义 "He said, \"I'm a student.\"" – 以后会学到其他一些字符的转义情形 Lu Chaojun, SJTU 4
字符串的输入 ·错误输入: >>>str input("Enter a string:" Enter a string:John 原因:input()是把输入当成表达式来计 算的! ·解决方法: -输入时加上引号 -使用raw input() Lu Chaojun,SJTU 5
字符串的输入 • 错误输入: >>>str = input("Enter a string: ") Enter a string: John • 原因:input()是把输入当成表达式来计 算的! • 解决方法: – 输入时加上引号 – 使用raw_input() Lu Chaojun, SJTU 5
input-与raw_input ·例:比较 >>>x input() >>>x raw input ( "John John >>>x >>>x >>>x input() >>>x raw input ( 3*4+2 3*4+2 >>>x >>>x ·可见raw input()将输入当成字符串数 据。 Lu Chaojun,SJTU 6
input与raw_input • 例:比较 >>>x = input() >>>x = raw_input() "John" John >>>x >>>x >>>x = input() >>>x = raw_input() 3*4+2 3*4+2 >>>x >>>x • 可见raw_input()将输入当成字符串数 据. Lu Chaojun, SJTU 6
字符串操作:取字符 ·字符串是字符序列,可通过位置索引访问每个字 符. [] -对长度为n的字符串,索引可以 人是大于0的数:自左向右为0~n-1,或者 人是负数:自右向左为-1,-2,-3,,-n -例如:若str="Hello Bob",则 strO]或str-9]是'H strl5]或str-4是' str8]或str-1刂是'b' str9]或str-10越界出错
字符串操作:取字符 • 字符串是字符序列,可通过位置索引访问每个字 符. [] – 对长度为n的字符串,索引可以 ©是大于0的数:自左向右为0 ~ n1, 或者 ©是负数:自右向左为1, 2, 3,…, n – 例如:若str = "Hello Bob" ,则 str[0]或str[9]是'H' str[5]或str[4]是' ' str[8]或str[1]是'b' str[9]或str[10]越界出错
字符串操作:取子串 ·切段:取一个索引范围内的字符 [:] -所取子串:位置索引从start~end-1 -start或/和end可省略,缺省值为串的首尾 -例如:若str="Hello Bob",则 strO:3]是'Hel" strl5:9]是'Bob' str:5]即str0:5] str[5:]即strl5,9] str:]即str0:9]
字符串操作:取子串 • 切段:取一个索引范围内的字符. [:] – 所取子串:位置索引从start ~ end1 – start或/和end可省略,缺省值为串的首尾 – 例如:若str = "Hello Bob" ,则 str[0:3]是'Hel' str[5:9]是' Bob' str[:5]即str[0:5] str[5:]即str[5,9] str[:]即str[0:9]
字符串操作:连接 ·两字符串的连接 -例如: "Hello"+"Bob"得到"HelloBob" ·一个字符串的重复 -例如: 3*"Hi"和"Hi"*3都得到"HiHiHi'" 。串长度函数len(0
字符串操作:连接 • 两字符串的连接 + – 例如: "Hello" + "Bob"得到"HelloBob" • 一个字符串的重复 – 例如: 3*"Hi"和"Hi"*3都得到"HiHiHi" • 串长度函数len()
编程实例:表查找 ·在一个数据表里查找目标 def main(): months="JanFebMarAprMayJunJulAugSepoctNovDec" n input ("Enter month number (1-12):" pos=(n-1)*3 monthAbbr months [pos:pos+3] print "The month abbreviation is",monthAbbr+"." -这是简单查找:利用位置规律来定位. 人例如:定长记录文件 一若是月份全称怎么办?
编程实例:表查找 • 在一个数据表里查找目标 def main(): months="JanFebMarAprMayJunJulAugSepOctNovDec" n = input("Enter month number (1-12): ") pos = (n-1)*3 monthAbbr = months[pos:pos+3] print "The month abbreviation is" ,monthAbbr+"." – 这是简单查找:利用位置规律来定位. ©例如:定长记录文件. – 若是月份全称怎么办?