>>> letter = fruit[1.5]
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
TypeError: string indices must be integers.
类型错误: 字符串索引必须是整数.
8.2 len
len是一个内置函数,返回字符串中字符的个数:
>>> fruit ='banana'>>>len(fruit)6
要获得字符串的最后一个字母,你可能会想这么写:
>>> length =len(fruit)>>> last = fruit[length]
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
IndexError: string index out of range.
索引错误: 字符串索引超出范围.
# 输入一个字符串和一个字符, 返回这个字符在字符串中的下标, 找不到就返回-1.deffind(word, letter):
index =0while index <len(word):if word[index]== letter:return index
index = index +1return-1print(find('Hello','o'))# 4print(find('Hello','1'))# -1
# 输入一个字符串和一个字符, 返回这个字符在字符串中的下标, 找不到就返回-1.deffind(word, letter, index):while index <len(word):if word[index]== letter:return index
index = index +1return-1print(find('Hello','H',0))# 0print(find('Hello','H',1))# -1
8.7 循环和计数
下面的代码计算字母a在字符串中出现的次数.
word ='banana'
count =0for letter in word:if letter =='a':
count = count +1print(count)# 3
defcount(word, find):
num =0for letter in word:if letter == find:
num = num +1print(num)
count('hello','l')# 2
count('abcabcaa','a')# 4
接着重写count函数,不直接遍历字符串,而是使用前面一节中的3形参版本的find函数.
defcount(word, find, index):
num =0while index <len(word):if find == word[index]:
num = num +1
index = index +1print(num)
count('hello','l',0)# 2
count('hello','l',3)# 1
word ='Pineapple'if word <'banana':print('Your word, '+ word +', comes before banana.')elif word >'banana':print('Your word, '+ word +', comes after banana.')else:print('All right, banana.')
Traceback (most recent call last):
File "C:\Users\13600\PycharmProjects\test\tese.py", line 15,in<module>
is_reverse('pots','stop')
File "C:\Users\13600\PycharmProjects\test\tese.py", line 9,in is_reverse
if word1[i]!= word2[j]:
IndexError: string index out of range
索引错误: 字符串索引超出范围
为了调试这类错误,第一步可以在发生错误的那行代码之前打印出索引的值.
defis_reverse(word1, word2):iflen(word1)!=len(word2):returnFalse
i =0
j =len(word2)while j >0:# 在这里打印print(i, j)# 0 4if word1[i]!= word2[j]:returnFalse
i = i +1
j = j -1returnTrueprint(is_reverse('pots','stop'))
defany_lowercase1(s):"""
正确的程序.
:param s: 字符串
:return: 布尔值
遍历字符串中的每个字符, 判断字符是否为小写的, 如果是小写的则返回True, 否则返回False.
"""for c in s:if c.islower():returnTrueelse:returnFalseprint(any_lowercase1('asd'))# True
defany_lowercase2(s):"""
错误的程序.
:param s: 字符串
:return: 字符串
遍历字符串的长度次, 但判断一次字符'c' 是否为小写, 就放回字符串'True'.
"""for c in s:# 这个程序存在错误, 应该将'c', 'True', 'False'的引号去掉.if'c'.islower():return'True'else:return'False'print(any_lowercase2('A'))# True
defany_lowercase3(s):"""
错误的程序.
:param s: 字符串
:return: 布尔值
遍历字符串, 对每个字符进行判断是否为小写, 但是无论前面的字符串是否为小写,
最后一个字符是大写, 则程序的逻辑完成错误.
"""for c in s:
flag = c.islower()return flag
print(any_lowercase3('aaaaA'))# False
defany_lowercase4(s):"""
正确的程序.
:param s: 字符串
:return: 布尔值
遍历字符串, 对每个字符进行判断是否为小写, 只要有一个小写则flag为True.
"""
flag =Falsefor c in s:
flag = flag or c.islower()return flag
print(any_lowercase4('aaD'))# True
defany_lowercase5(s):"""
错误的程序.
:param s: 字符串
:return: 布尔值
遍历字符串, 对每个字符进行判断是否为小写, 出现一个非小写字母则返回False.
"""for c in s:ifnot c.islower():returnFalsereturnTrueprint(any_lowercase5('aAd'))# False
for i inrange(65,91):print(chr(i), end=' ')# A B C D E F G H I J K L M N O P Q R S T U V W X Y Zprint()for i inrange(97,123):print(chr(i), end=' ')# a b c d e f g h i j k l m n o p q r s t u v w x y z
a从97开始,那么所有的值就先减去97,回到0-25.然后加上步长,再对26求余.最后再加上97.
defrotate_word(word, rotation):# 遍历字母.for i in word:# 字母10进制加上步长, 转为字母, end参数设置print以''空字符结尾.print(chr((ord(i)-97+ rotation)%25+97), end='')
rotate_word('hello',24)
# 区分大小写版本if letter.isupper():
start =ord('A')# 65elif letter.islower():
start =ord('a')# 97else:return letter
c =ord(letter)- start
i =(c + n)%26+ start