一、问答题
(1)假设给定如下s1、s2、s3和s4四个字符串:
s1 = "Welcome to Python"
s2 = s1
s3 = "Welcome to Python"
S4 = "to"
# 下面表达式的结果是什么?
a.s1 == s2 l.4 * S4
b.s2.count('o') m.len(s1)
c.id(s1) == id(s2) n.max(s1)
d.id(s1) == id(s3) o.min(s1)
e.s1 <= s4 p.s1[-4]
f.s2 >= s4 q.s1.1ower()
g.s1 != s4 r.s1.rfind('o')
h.s1.upper() s.s1.startswith("o")
i.s1.find(s4) t.s1.endswith("o")
j.s1[4] u.s1.isalpha()
k.s1[4 :8] v.s1 + s1
a: True l: totototo
b: 3 m: 17
c: True n: y
d: True o: P
e: True p: t
f: False q:welcom to python
g: True r : 15
h: WELCOME TO PYTHON s: False
i: 8 t: False
j: o u: False #存在空格
k: ome v: Welcome to PythonWelcome to Python
(2)假设s1和s2是两个字符串,下面哪个语句或表达式是错误的?
s1 = "programming 101"
s2 = "programming is fun"
s3 = s1 + s2
s3 = s1 - s2
s1 == s2
s1 >= s2
i = len(s1)
c = s1[0]
t = s1[:5]
t = s1[5:]
s3 #字符串类型的数据不能做减操作
(3)下面代码输出内容是什么?
s1="Welcome to Python"
s2 = s1.replace("o","abc")
print(s1)
print(s2)
Welcome to Python
Welcabcme tabc Pythabcn
(4)假如运行下面程序的时候输入A。那么输出什么?
x = input("Enter a character:")
ch = chr(ord(x) + 3)
print(ch)
d
(5)假如运行下面的程序的时候输入A和Z。那么输出什么?
x= input("Enter a character:")
y= input("Enter a character:")
print(ord(y) - ord(x))
25
二、编程题
(6)十六进制转十进制【录制讲解】
视频链接:录制: 录制2
录制文件:https://meeting.tencent.com/crm/2OGDqRX03e
题目描述
输入一个十六进制字符串,输出其对应的十进制数字
输入输出描述
输入一个十六进制字符串
输出十进制数字
示例
输入:
1e1b9
输出:
123321
s = input()
#用切片把字符串反转
s = s[::-1]
the_sum = 0
for i in range(len(s)):
if s[i].isdigit():
the_sum += int(s[i]) * 16 ** i
else:
the_sum += (ord(s[i]) - 87) * 16 ** i
print(the_sum)
#不想翻转的情况
s = input()
total_sum = 0
for i in range(len(s)):
if s[len(s) - 1 - i].isdigit():
total_sum += int(s[len(s) - 1 - i]) * 16 ** i
else:
total_sum += (ord(s[len(s) - 1 - i]) - 87) * 16 ** i
print(total_sum)
#偷懒方法使用内置函数int
s = input()
print(int(s, 16))
(7)检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
示例1
输入:
123456a
输出:
No
示例2
输入:
123abcABC
输出:
Yes
#密码检测
#思路1 用字典
def password(s):
if len(s) < 8:
return False
dic = dict()
dic = {'english':0, 'number':0, 'other':0}
for letter in s:
#判断这个字符是否是字母
if letter.isalpha():
dic['english'] += 1
#判断这个字符是否是数字
elif letter.isdigit():
dic['number'] += 1
else:
dic['other'] += 1
if dic['english'] < 2 or dic['number'] < 2 or dic['other'] > 0:
return False
return True
s = input()
if password(s):
print('Yes')
else:
print('No')
#思路二用集合
def password(s):
if len(s) < 8:
return False
#把源字符串生成集合
s = set(s)
letter = set()
#将letter集合中添加所有的大小写字母
for i in range(26):
letter.add(chr(i + 97))
letter.add(chr(i + 65))
#num集合里面添加所有可以输入的数字
num = set('123456789')
#取差集,确保集合s中只有字母和数字,否则就返回False
if len(s - (letter | num)) > 0:
return False
#最后取交集确定集合s中至少有字母2个和数字2个
return len(s & letter) >= 2 and len(s & num) >= 2
s = input()
if password(s):
print('Yes')
else:
print('No')
(8)相似词【录制讲解】
**视频链接:**录制: 录制4
录制文件:https://meeting.tencent.com/crm/2jkDjYMJb6
题目描述
输入两个英文单词,判断其是否为相似词,所谓相似词是指两个单词包含相同的字母
输入输出描述
输入两行,分别表示两个单词
输出结果,为相似词输出YES,否则输出NO
示例
输入:
listen
silent
输出:
YES
#思路1
"""
遍历word1
然后挨个判断每个字母是否在word2中
"""
word1 = input()
word2 = input()
for letter in word1:
if letter in word2:
print('YES')
break
else:
print('NO')
#思路2 集合
word1 = set(input().lower())
word2 = set(input().lower())
#有交集说明有相同字母
if word1 & word2:
print('YES')
else:
print('NO')
(9)找出基因
生物学家使用字母A、C、T和G构成的字符串模拟一个基因组。一个基因是基因组的一个子串,它从三元组ATG后开始并在三元组TAG、TAA或TGA之前结束。此外,基因字符串的长度是3的倍数,而且基因不包含三元组ATG、TAG、TAA和TGA。
编写程序提示用户输入一个基因组,然后显示基因组里的所有基因。如果输入序列中没有找到基本,那么程序显示“未发现任何基因”。
示例1
输入:TTATGTTTTAAGGATGGGGGGTTAGTT
输出:
TTT
GGGGGT
示例2
输入:TGTGTGTATAT
输出:
未发现任何基因
#输入基因组序列
s = input()
genes = []
start = 0
#合法字符集
valid_chars = {'A', 'C', 'T', 'G'}
while True:
start = s.find('ATG', start)
#没找都基因组
if start == -1:
break
#基因组开始的位置跳过ATG
start += 3
last = ['TAG', 'TAA', 'TGA']
#查找最近的三元组
min_end = len(s)
for mapper in last:
end = s.find(mapper, start)
if end != -1 and end < min_end:
min_end = end
#找不到终止三元组
if min_end == len(s):
break
#提取候选基因
candidate = s[start: min_end]
# print(len(candidate))
#检查(基因长度是否为3的倍数,并且不包含禁止的三元组
if len(candidate) % 3 == 0:
forbidden = ['ATG', 'TAG', 'TAA', 'TGA']
valid = True
if not all(c in valid_chars for c in candidate):
valid = False
for i in range(0, len(candidate), 3):
if candidate[i:i+3] in forbidden:
valid = False
break
if valid:
genes.append(candidate)
if not genes:
print('未发现任何基因')
else:
for gene in genes:
print(gene)
(10)手机键盘【录制讲解】
**视频链接:**录制: 录制5
录制文件:https://meeting.tencent.com/crm/29BD531432
手机的国际标准字母/数字对应键盘如下(九宫格输入法):

编写程序,当用户想输入一段信息时(包含字母、数字、空格,忽略字母大小写),他需要按哪些键?
示例1
输入:My name is bob and I am 18 years old
输出:690626304702620263040260180932770653
#手机键盘
digit_to_letters = {
'2' : 'abc',
'3' : 'def',
'4' : 'ghi',
'5' : 'jkl',
'6' : 'mno',
'7' : 'pqrs',
'8' : 'tuv',
'9' : 'wxyz',
'0' : ' ',
'↑' : '*',
'*' : '+'
}
#生成字母到数字的反向映射字典(字母为键数字为值)
letter_to_digit = {}
for digit, letters in digit_to_letters.items():
for letter in letters:
letter_to_digit[letter] = digit
s = input().lower()
result = []
#遍历用户输入的字符串
for char in s:
#如果在映射字典里就添加对应的数字键
if char in letter_to_digit:
result.append(letter_to_digit[char])
#如果是数字字符直接保留
elif char.isdigit():
result.append(char)
#用join将列表中的字符串连接起来
print(''.join(result))
(11)信用卡号的合法性
信用卡号遵循下面的模式:一个信用卡号必须是13位到16位的整数,它的开头必须是:
- 4 是指Visa卡
- 5 是指Master卡
- 37 是指 American Express卡
- 6 是指Discover卡
现有一个验证信用卡号是否有效的检测算法,Luhn检测或Mod10检测,它的检测原理如下:
假设一个卡号:4388576018402626
(1)从左到右对奇数位置的数字进行 ×2 操作,如果结果为两位数,则将两位数加在一起得到一个一位数
4 8 5 6 1 4 2 2
4 * 2 = 8
8 * 2 = 16 (1 + 6 = 7)
5 * 2 = 10 (1 + 0 = 1)
6 * 2 = 12 (1 + 2 = 3)
1 * 2 = 2
4 * 2 = 8
2 * 2 = 4
2 * 2 = 4
(2)将第一步得到的所有一位数相加
8 + 7 + 1 + 3 + 2 + 8 + 4 + 4 = 37
(3)将卡号从右到左在奇数位置上的数字相加
6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38
(4)将第二步与第三步的结果相加
37 + 38 = 75
(5)如果第四步的结果能被10整除,那么卡号就是合法的;否则卡号不合法。
例如:438857601840707是合法的
编写程序,输入一个卡号,判断其合法性。
#信用卡号的合法性
def is_law(digit):
if len(digit) < 13 or len(digit) > 16:
return False
#如果不是以这些数字开头就直接返回False
if not digit.startswith(('4', '5', '37', '6')):
return False
#第一步
the_sum = 0
for i in range(0, len(digit), 2):
by = int(digit[i]) * 2
if by > 9:
the_sum += (by % 10 + by // 10)
else:
the_sum += by
#第二步
two_sum = 0
for i in range(len(digit) - 1, -1, -2):
two_sum += int(digit[i])
if (the_sum + two_sum) % 10 == 0:
return True
else:
return False
digit = input()
if is_law(digit):
print('合法')
else:
print('不合法')