python-ComputingwithStrings课后题
翻译:显⽰评估以下每个字符串表达式的结果。
解:(a)The Knights who say,ni!  "The Knights who say,"+s2表⽰字符串连接
(b) spamspamspamni!ni!      3*s1+2*s2表⽰字符串重复的次数为乘以整数
(c)p                                    s1[1]表⽰取出字符串第1个位置的字符
(d)pa                    s1[1:3]表⽰取出字符串第1到第3位置的字符(不包括第三)
(e) ani    s1[2]+s2[:2]表⽰s1字符串的第2个字符与s2字符串的前两个字符相连
(f) spam!  s2[-1]表⽰s2第2个字符,即-1+3(3为s2字符串的长度,即len(s2)==3)
(g)SPAM                        upper(s1)表⽰将s1字符串的所有字母变为⼤写,⽽lower()是将所有字母变为⼩写。
(h) NI! NI! NI!    ljust(s1,4)表⽰从左边开始数,s1字符串占4个字符,若s1是5个字符,那么就紧挨着,若s1是3个字符,那么s1右边多⼀个空格。同样,rjust是从右边开始数,即左边会多出空格。
翻译:给定与前⼀个问题相同的初始语句,显⽰⼀个Python表达式,它可以通过对s1和s2执⾏字符串操作来构造以下每个结果。
解:(a) string.upper(s2[:2])
(b) 2+s1+s2
(c) string.ljust(string.capitalize(s1)+ string.rjust(string.upper(s2),4),11)*3
(d) s1[:3]+s2[0]
(e)string. split(s1,"a")  (f) s1[:2]+s1[3]或者replace(s1,"a","")
writelines()方法将什么写入文件翻译: 显⽰将由以下每个程序⽚段⽣成的输出。
解:(a)a;a;r;d;v;a;r;k    (b) Now;is;the;winter;of;    (c) M;ss;ss;pp  (d)scrt
(e) tfdsfu  ord(ch)表⽰将每个字母转换为数字(int型的),加1后再转换为字母
翻译:显⽰由以下每个字符串格式化操作产⽣的字符串。 如果操作不合法,请解释原因。
(a) Looks like spam and eggs for breakfast
(b) There is 1 spam 4 you
(c)报错。原因:⼀个s%只能对应⼀个字符串
(d) 2.30 2.35 %w.hf/d/s这个东西的w表⽰字符所占宽度,若⼩于字符串实际宽度,则以实际为准。⽐如说%10.2f %(1.364)则结果是
1.36,但是前⾯有6个空格;h代表保留h位⼩数;f为float类型,d为int类型,s为string类型
(e) 2.30000 2.34680
(f) Time left 01:37.37  %02d%(1)表⽰1这个整数,但是这个整数占两个字符,并且前⾯⽤0来填充
(g)报错。原因:%d代表输⼊的是整数,⽽”14”是个字符串,故报错
翻译:解释为什么公钥加密对于保护Internet上的通信⽐私有(共享)密钥加密更有⽤。
解:公钥是可以公开发送给对⽅的,⽽密钥,不能公开传送,所以要⽤公钥加密,这样,只有有私钥的⼈才能打开取出来。
翻译:某位CS教授给出了5分测验,这些测验按照5-A,4-B,3-C,2-D,1-F,0-F等级进⾏评分。编写⼀个接受测验分数作为输⼊的程序 并打印出相应的等级。
(感觉这个题出错了,应该是1-E,0-F;注意python没有||和&&运算符,有and和or)
解:score=input("输⼊分数: ")
if((score==0)or(score==1)):
print "F"
elif(score==2):
print "D"
elif(score==3):
print "C"
elif(score==4):
print "B"
elif(score==5):
print "A"
翻译:某位CS教授给出了100分的考试,分数为90-100:A,80-89:B,70-79:C,60-69:D,<60:F。 编写⼀个接受考试成绩作为输⼊的程序,并打印出相应的成绩。
解:score=input("输⼊分数:")
if((score>=90)and(score<=100)):
print "A"
elif((score>=80)and(score<=89)):
print "B"
elif((score>=70)and(score<=79)):
print "C"
elif((score>=60)and(score<=69)):
print "D"
elif(score<60):
print "F"
print score
翻译:⾸字母缩略词是通过将短语中的单词的第⼀个字母取出并从中制作单词⽽形成的单词。 例如,RAM是“随机存取存储器”的⾸字母缩写。编写⼀个程序,允许⽤户键⼊短语并输出该短语的⾸字母缩写词。 注意:⾸字母缩略词应全部为⼤写,即使短语中的单词未⼤写。
解:法⼀:string=raw_input("请输⼊短语:")
#将短语的每个单词⾸字母变⼤写
string1=capwords(string)
#定义⼀个空字符串⽤来存放输出结果
string2=""
#遍历短语的每个单词
for ch in split(string1):
#取每个单词的第⼀个字母
string2+=ch[0]
print string2
法⼆:string=raw_input("请输⼊短语:")
string1=capwords(string)
string2=""
arr=split(string1)
for i in range(len(arr)):
string2=string2+arr[i][0]
print string2
(明显地,法⼀简单)
翻译:数字学家声称能够根据名称的“数值”确定⼀个⼈的性格特征。 名称的值是通过总结名称字母的值来确定的,其中'a'是1,'b'是
2,'c'是3等,直到'z'是26。例如, 名字“Zelle”的价值为26+5+12+12+5=60(顺便说⼀下,这个数字恰好是⼀个⾮常吉利的数字)。 编写⼀个程序,计算作为输⼊提供的单个名称的数值。
(ASCII码中: "A"==65; "Z"==90; "a"==97;"z"==122;)
解:name=raw_input("请输⼊你的名字:")
#将名字的字母全变为⼩写
name1=lower(name)
#定义⼀个加分器
ans=0
#遍历名字中所有的字母
for ch in name1:
#score为每个字母的分数,由于ASCII码中"a"为97,故减去96
score=ord(ch)-96
ans+=score
print ("哎呦,不错哦,你名字的分数竟然是%d" % (ans))
翻译:将解决⽅案扩展到上⼀个问题,以允许计算完整的名称,例如“John Marvin Zelle”或“John Jacob Jingleheimer Smith。”总值只是每个名称的数值之和。
(这个题和上⼀道的区别:先将名字split,然后每个单词按照上⼀道题的⽅法去解就⾏,只需要加⼀个for循环就⾏)
解:name=raw_input("请输⼊你的名字:")
#将名字的字母全变为⼩写
name1=lower(name)
#定义⼀个加分器
ans=0
#遍历名字中所有的单词
for chs in split(name1):
#遍历单词中所有的字母
for ch in chs:
#score为每个字母的分数,由于ASCII码中"a"为97,故减去96
score=ord(ch)-96
ans+=score
print ("哎呦,不错哦,你名字的分数竟然是%d" % (ans))
翻译:凯撒密码是⼀种简单的替换密码,它基于将明⽂消息的每个字母移动到字母表中位置的固定数字(称为密钥)的想法。 例如,如果键值为2,则单词“Sourpuss”将被编码为“Uqwtrwuu”。原始消息可以通过使⽤键的否定来“重新编码”它来恢复。
编写⼀个可以编码和解码凯撒密码的程序。 程序的输⼊将是⼀串明⽂和密钥的值。 输出将是⼀个编码消息,其中原始消息中的每个字符都被替换为在ASCII字符集中移动它们的关键字符。 例如,如果ch是字符串中的字符⽽key是要移位的数量,那么替换ch的字符可以计算为:chr(ord(ch)+ key)。
解: string=raw_input("输⼊字符串:")
key=input("输⼊密匙:")
string1=""
for ch in string:
string1+=chr(ord(ch)+key)
print string1
翻译:上⼀个练习的⼀个问题是它没有处理当我们“掉落”字母表(或ASCII编码)时的情况。 真正的凯撒密码以圆形⽅式进⾏移位,其中“z”之后的下⼀个字符是“a”。 将解决⽅案修改为上⼀个问题,使其成为循环。 您可以假设输⼊仅包含字母和空格。
解:string=raw_input("输⼊字符串:")
key=input("输⼊密匙:")
string1=""
for ch in string:
value=ord(ch)+key

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。