新的一周开始啦,让我们先来三道python题练练手吧
本期知识点:
1.双重for循环的使用
2.字符串下标index的理解
3.python自带的collections库:Counter统计
第一题
输出九九乘法口诀表
for i in range(1, 10):
# print(i) # 行数
for j in range(1, i+1):
# print("列数:", j)
print("%s * %s = %-2s" % (j, i, j*i), end=" ")
print() # print本身就会换行
输出结果
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
第二题
找出单词 “mengwuji” 在 字符串“Hello,my name is mengwuji,You can also call me xiaozai” 中出现的位置,找不到返回-1
print(a.index("H")) #输出0 (返回H的下标,下标从0开始)
print(a.index("mengwuji")) #输出17 (返回mengwuji字符串的第一个字符的下标)
print(a.index("n")) #输出9 (返回字符串中第一个n的下标)
#下面这个注意,左闭右开,10是可以取的下标,20是不取的下标,即如果n的下标为20,则不在此范围
print(a.index("n", 10, 20)) #输出19 (返回字符串中下标10-20之间第一个n的下标 )
# print(a.index("q")) # ValueError: substring not found (取不存在的字符则会报错)
if "mengwuji" in a:
print(a.index("mengwuji")) #输出17
else:
print("字符串中无此字符")
# 三元表达式
print(a.index("mengwuji") if "mengwuji" in a else "字符串中无此字符") #输出17
第三题
输入一个字符串 str, 输出第 m 个只出现过 n 次的字符,如在字符串 "你说说测试小仔是不是梦无矶测试开发之路的小仔" 中, 找出第2个只出现1 次的字符,输出结果:不
解决思路: 利用 collections 库的 Counter方法统计字符串每个单词出现的次数
方法一:
from collections import Counter
a = "你说说测试小仔是不是梦无矶测试开发之路的小仔"
m = 2 # 第几个
n = 1 # 出现的次数
b = Counter(a)
print(b)
print(dict(b)) # 输出 {'你': 1, '说': 2, '测': 2, '试': 2, '小': 2, '仔': 2, '是': 2, '不': 1, '梦': 1, '无': 1, '矶': 1, '开': 1, '发': 1, '之': 1, '路': 1, '的': 1}
s = []
for i, j in dict(b).items():
# print(i, j)
if j == n:
s.append(i)
print(s) #输出 ['你', '不', '梦', '无', '矶', '开', '发', '之', '路', '的']
print(s[m-1]) #输出 不 (在字符串中,下标是比个数少一,所以这里需要减一)
方法二:
# 列表推导式
a = "你说说测试小仔是不是梦无矶测试开发之路的小仔"
m = 2 # 第几个
n = 1 # 出现的次数
b = Counter(a)
print([i for i, j in dict(b).items() if j == n][m-1]) #输出 不