python学习第五周字符串相关学习内容总结与作业


第五周主要是对字符串相关操作的学习包括

字符串的定义字符的序列

基本字符运算

    求长度len(str)函数

    拼接+str = str1 + ‘pinjie’        

    重复*name * 3 就是把name的字符串内容输出三次

    成员运算in判断一个字符串是否是另一个字符串的子串

    for语句 枚举字符串中的每个字符

    字符串索引每个字符串都有一个索引值索引从0前向或-1后向开始索引运算符[]

    切片操作选择字符串的子序列语法 [start : finish]

        start子序列开始位置的索引值

        finish子序列结束位置的下一个字符的索引值 

        如果不提供 start 或者 finish默认 start 为第一个字符开始finish

为最后一个字符 。

    获得逆字符串[ : : -1 ]


字符串方法: 对象提供的函数

    如my_str.replace(old,new)生成一个新的字符串,其中使用new替换old子串

    find方法查找字符在字符串中索引位置的方法

    split方法分割字符串

    title方法首字母大写其它字母小写的格式


字符串比较

    任何一个字符都对应一个数字

    直接比较对应数字的大小


字符串格式化

    format 方法

    http://docs.python.org/2/library/string.html#format-string-syntax


正则表达式 re.search()

    https://docs.python.org/2/library/re.html  




课后作业

  1. 编写程序完成下列题目2分

题目内容

“Pig Latin”是一个英语儿童文字改写游戏整个游戏遵从下述规则


(1). 元音字母是‘a’、‘e’、‘i’、‘o’、‘u’。字母‘y’在不是第一个字母的情况下也被视作元音字母。其他字母均为辅音字母。例如单词“yearly”有三个元音字母分别为‘e’、‘a’和最后一个‘y’和三个辅音字母第一个‘y’、‘r’和‘l’。


(2). 如果英文单词以元音字母开始则在单词末尾加入“hay”后得到“Pig Latin”对应单词。例如“ask”变为“askhay”“use”变为“usehay”。


(3). 如果英文单词以‘q’字母开始并且后面有个字母‘u’将“qu”移动到单词末尾加入“ay”后得到“Pig Latin”对应单词。例如“quiet”变为“ietquay”“quay”变为“ayquay”。


(4). 如果英文单词以辅音字母开始所有连续的辅音字母一起移动到单词末尾加入“ay”后得到“Pig Latin”对应单词。例如“tomato”变为“omatotay” “school” 变为“oolschay”“you” 变为“ouyay”“my” 变为“ymay ”“ssssh” 变为“sssshay”。


(5). 如果英文单词中有大写字母必须所有字母均转换为小写。 


输入格式:

一系列单词单词之间使用空格分隔。


输出格式

按照以上规则转化每个单词单词之间使用空格分隔。


输入样例

Welcome to the Python world Are you ready


输出样例

elcomeway otay ethay ythonpay orldway arehay ouyay eadyray

时间限制500ms内存限制32000kb


参考代码

个人完成的代码

运维人员写出的程序思维没有开发人员那么抽象还需要再多努力。


new_words=''
Output_Words=''
#Input_Words = []
Input_Words = raw_input().split()

for Word in Input_Words:
    Word = Word.lower()
    #print Word
    if Word[0] in 'aeiou':
       new_words =  Word + 'hay'
    elif Word[0:2] == 'qu':
       new_words =  Word[2:len(Word)] + 'quay'
    else:
        Tmp_Chars = Word[0]
        #print 'haha:',Tmp_Chars
        for Char in Word[1:len(Word)]:
            if Char not in 'aeiouy':           
                Tmp_Chars =Tmp_Chars + Char                
            else:
                break
            
        n=len(Tmp_Chars)
        if n == len(Word):
            new_words  = Word + 'ay'
        else:
            new_words = Word[n:len(Word)]+Word[0:n]+'ay'
    if len(Output_Words) == 0:
        Output_Words = Output_Words +  new_words
    else:
        Output_Words = Output_Words + ' '  +  new_words       
print Output_Words


作业做完了以后网上跟人交流的时候一个开发同学给的参考结果

个人认为这份代码写的比较专业先思考程序的结构设计然后再实现相关代码不像我一边理解题面的意思一边写代码错了很多次才终于通过代码测试。这一题主要用到了本周学习到的字符分割split用法字符串的拼接还有就是字符在字符串中in的用法。


Input_string = raw_input()
string_wds=[]
string_wds =Input_string.split()
print string_wds

def re_index( word ):
    indx = 0
    for i in word:
        if indx == 0 and (i not in 'aeiou'):
            indx = indx + 1
        else:
            if indx >0 and ( i not in 'aeiouy'):
                indx = indx + 1
            else:
                break
    return  indx

new_string=''
final_string=''
for i in string_wds:
    i = i.lower()
    if i[0] in 'aeiou':
        new_string = i+'hay'
    else:
        if i[0] == 'q' and  i[1] == 'u':
            new_string = i[2:len(i)]+'qu' +'ay'
        else:
            new_string =i[re_index(i):len(i)]+i[0:re_index(i)]+'ay'
    if  len( final_string) == 0:
        final_string=final_string+new_string
    else:
        final_string=final_string+ ' '+ new_string 
print  final_string


2.编写程序完成下列题目1分

题目内容

依次判断一系列给定的字符串是否为合法的 Python 标识符。


输入格式:

一系列字符串每个字符串占一行。


输出格式

判断每行字符串是否为合法的 Python 标示符如果合法则输出 True否则输出 False。


输入样例

abc

_def

21gh


输出样例

True

True

False

时间限制500ms内存限制32000kb


刚开始搞不清楚如何实现多行输入感觉这个对于刚学的人是一个未知的知识点于是百度了下找到相关说明才完成这个题最关键的输入要求。功夫在课外。这一题用到了这周课程中关于字符串的正则匹配的用法整个实现过程还是非常简单的。

import re

stopword = ''
str = ''
for line in iter(raw_input, stopword):
  str += line + '\n'


for words in str.split():
    if not re.search(u'^[_a-zA-Z0-9]+$',words):
        print False
    elif not re.search(u'^[_a-zA-Z]+$',words[0]):
        print False
    else:
        print True


3编写程序完成下列题目2分

题目内容

依次计算一系列给定字符串的字母值字母值为字符串中每个字母对应的编号值A对应1B对应2以此类推不区分大小写字母非字母字符对应的值为0的总和。例如Colin 的字母值为 3 + 15 + 12 + 9 + 14 = 53


输入格式:

一系列字符串每个字符串占一行。


输出格式

计算并输出每行字符串的字母值。


输入样例

Colin

ABC


输出样例

53

6

时间限制500ms内存限制32000kb


个人感觉这一题是比较简单的个人私自用了一个超纲的方法通过字符串获取ascii值来进行编号值的替代。可能有更简单的方法需要看老师公布的其他人员写的答案期待有更好的答案出现。


import re

stopword = ''
str = ''
for line in iter(raw_input, stopword):
  str += line + '\n'

for words in str.split('\n'):
    if len(words) > 0 :
        count = 0
        words = words.lower()
        for c in words:
            if not re.search('[a-z]',c):
                num = 0
            else:
                num = ord(c) - ord('a') + 1
                #print "num is", num
                count += num
        print count


由于中间有事而且第一题碰到了点问题第二个测试集不清楚老师用了什么示例来进行测试一直没有通过搞的这次作业跨了一年12月30日-1月4日才完成。