这次的作业挺没意思的。。
1、编写函数rotateword,接收一个字符串strsrc以及一个整数n作为参数,返回新字符串strdes,其各个字母是strsrc中对应位置各个字母在字母表中“轮转”n字符后得到的编码。
2、编写函数avoids,接收一个单词和一个含有禁止字母的字符串,判断该单词是否含有禁止字母。
3、编写函数useonly,接收一个单词和一个含有允许字母的字符串,判断该单词是否仅仅由允许字母组成。
4、编写函数useall,接收一个单词和一个含有需要字母的字符串,判断该单词是否包含了所有需要字母至少一个,并输出words.txt中使用了所有元音字母aeiou的单词。
5、编写函数hasnoe,判断一个英语单词是否包含字母e,并计算words.txt中不含e的单词在整个字母表中的百分比。
6、编写函数isabecedarian,判断一个英语单词中的字母是否符合字母表序,并且输出words.txt中所有这样的单词。
1.轮转字符:
def lzh1(strsrc,n):
strdes=[chr((ord(j)+n)%ord('z')) for j in strsrc]
return "".join(strdes)
a="abcde"
print(lzh1(a,2))
函数ord()返回字符的整型值,将其加n后对字符z的整型值取余就得到了轮转字符的整型值,用列表推导式将其存在列表strdes中,然后用join函数将列表中各个字符用空字符串连接,就得到了要求的字符串。
2.检查字符 其1:
def lzh2(word,warn):
if warn in word:
return False
else:
return True
a="abcde"
print(lzh2(a,'c'))
直接使用in判断字符是否在给定的字符串里,返回bool值。
3.检查字符 其2:
def lzh3(word,warn):
a=True
for j in word:
if(j not in warn):
a=False
return a
a="abcde"
print(lzh3(a,'cdf'))
直接用一个for循环,对于在单词中的每个字符,检查它是否在合法字符串中,只要不在即改变布尔值,最后将这个布尔值返回即可。
4.检查字符 其3:
def lzh4(word,warn):
a=True
for j in warn:
if(j not in word):
a=False
return a
f=open("words.txt")
r=f.read()
for k in r.split():
if(lzh4(k,'aeiou')==True):
print(k)
和上一题一样的原理,只是word和warn扮演的角色恰好相反。在测试中用split()将得到的字符串变成一个一个单词字符串组成的列表,方便操作。
5.统计单词:
def lzh5(word):
return True if 'e' in word else False
f=open("words.txt")
r=f.read()
count=0
for k in r.split():
if(lzh5(k)==False):
count+=1
print(count/len(r.split())*100,"%")
函数部分直接返回e是否在word中的布尔值即可,在调用中用计数器对其统计,求商再乘以100就可以以百分数形式显示了。
6.字母表序:
def lzh6(word):
for i in range(0,len(word)-1):
if(ord(word[i])>ord(word[i+1])):
return False
return True
f=open("words.txt")
r=f.read()
count=0
for k in r.split():
if(lzh6(k)==True):
print(k)
对于每个单词,利用下标访问字符和下一个字符作比较,只要存在前面的字符的整型值比后面的字符的整型值大的,就不符合我们的要求了,直接返回False,最终还符合要求就返回True。
1.运行结果:cdefg
2.运行结果:False
3.运行结果:False
4.文件words.txt:
aieousp
lzhh
sbsbsbs
abjde
flora
aeiouu
gayhub
paeio
python
auoeir
运行结果:
aieousp
aeiouu
Auoeir
5.运行结果:50.0 %
6.运行结果:aeiouu