《Python 编程通关指南:10 大经典案例带你玩转字符串与算法》

一、问答题

(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

手机的国际标准字母/数字对应键盘如下(九宫格输入法):

image-20250423092904104

编写程序,当用户想输入一段信息时(包含字母、数字、空格,忽略字母大小写),他需要按哪些键?

示例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('不合法')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值