一、问答题
(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 = s1 + s2
s3 = s1 - s2
(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)十六进制转十进制【录制讲解】
视频链接:https://meeting.tencent.com/crm/Noendb55b8
题目描述
输入一个十六进制字符串,输出其对应的十进制数字
输入输出描述
输入一个十六进制字符串
输出十进制数字
示例
输入:
1e1b9
输出:
123321
"""
1e1b9
"""
n = input()
def solve(n):
reversenum = n[::-1]
m = 0
for i in range(len(reversenum)):
if reversenum[i].isdigit():
m += int(reversenum[i] )* (16 ** i)
else:
m += (ord(reversenum[i]) - 87) * (16 ** i)
return m
print(solve(n))
(7)检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
示例1
输入:
123456ab
输出:
No
示例2
输入:
123abcABC
输出:
Yes
def solve(n):
count1 = 0
count2 = 0
for i in n:
if i.isdigit():
count1 += 1
else:
count2 += 1
if len(n) >= 8 and n.isalnum() and count1 >= 2 and count2 >= 2:
print("Yes")
else:
print("No")
n = input()
solve(n)
(8)相似词【录制讲解】
**视频链接:**https://meeting.tencent.com/crm/2qvnWDXBc6
题目描述
输入两个英文单词,判断其是否为相似词,所谓相似词是指两个单词包含相同的字母
输入输出描述
输入两行,分别表示两个单词
输出结果,为相似词输出YES,否则输出NO
示例
输入:
listen
silent
输出:
YES
def solve(s1,s2):
res = True
#遍历字符串1
for i in s1:
if i not in s2:
res = False
break
#如果False则不进入循环
if res == True:
for i in s2:
if i not in s1:
res = False
if res:
print("Yes")
else:
print("No")
s1 = input()
s2 = input()
solve(s1,s2)
(9)找出基因
生物学家使用字母A、C、T和G构成的字符串模拟一个基因组。一个基因是基因组的一个子串,它从三元组ATG后开始并在三元组TAG、TAA或TGA之前结束。此外,基因字符串的长度是3的倍数,而且基因不包含三元组ATG、TAG、TAA和TGA。
编写程序提示用户输入一个基因组,然后显示基因组里的所有基因。如果输入序列中没有找到基本,那么程序显示“未发现任何基因”。
示例1
输入:TTATGTTTTAAGGATGGGGGGTTAGTT
输出:
TTT
GGGGGT
示例2
输入:TGTGTGTATAT
输出:
未发现任何基因
def solve(s):
res = []
index = 0
# 找所有基因
while True:
start = s.find('ATG', index)
if start == -1:
break
# 寻找该起始密码子对应的最近终止密码子
end = len(s)
for end_triple in ['TAG', 'TAA', 'TGA']:
temp_end = s.find(end_triple, start + 3)
if temp_end != -1 and temp_end < end:
end = temp_end
# 如果未找到终止密码子,继续搜索下一个起始密码子
if end == len(s):
# 没有找到结束三元组,继续查找下一个 ATG
index = start + 3
continue
# 提取可能的基因序列
jiyin = s[start + 3:end]
# 检查基因序列是否满足条件
if len(jiyin) % 3 == 0 and 'ATG' not in jiyin and 'TAG' not in jiyin and 'TAA' not in jiyin and 'TGA' not in jiyin:
res.append(jiyin)
# 继续查找下一个 ATG
index = end + 3
if res:
print(res)
else:
print("未发现任何基因")
s = input()
solve(s)
(10)手机键盘【录制讲解】
**视频链接:**https://meeting.tencent.com/crm/Kmvnv0Qv38
手机的国际标准字母/数字对应键盘如下(九宫格输入法):

编写程序,当用户想输入一段信息时(包含字母、数字、空格,忽略字母大小写),他需要按哪些键?
示例1
输入:My name is bob and I am 18 years old
输出:690626304702620263040260180932770653
key_boards = {'a':'2','b':'2','c':'2',
'd':'3','e':'3','f':'3',
'g':'4','h':'4','i':'4',
'j':'5','k':'5','l':'5',
'm':'6','n':'6','o':'6',
'p':'7','q':'7','r':'7','s':'7',
't':'8','u':'8','v':'8',
'w':'9','x':'9','y':'9','z':'9',
' ':'0'
}
def solve_keyboards(s):
s = s.lower()
res = ''
for i in s:
if i in key_boards:
res += key_boards[i]
else:
res += i
return res
s = input()
print(solve_keyboards(s))
(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_correct(s):
if len(s) < 13 or len(s) > 16:
return False
#是否以这些数字开头
if s[0] != 4 or s[0] != 5 or s[0] != 37 or s[0] != 6:
return False
sum1 = 0
for i in range(0, len(s), 2):
by = int(s[i]) * 2
if by > 9:
sum1 += (by % 10 + by // 10)
else:
sum1 += by
sum2 = 0
for i in range(len(s) - 1, -1, -2):
sum2 += int(s[i])
if (sum1 + sum2) % 10 == 0:
return True
else:
return False
s = input()
if is_correct(s):
print('合法')
else:
print('不合法')