Python小试牛刀(经典例题)[连载中]

文章目录

        • 1、[单词的长度](http://noi.openjudge.cn/ch0107/24/)
        • 2、单词翻转
        • 3、回文子串
        • 4、加密的病历单
        • 5、字符串移位包含问题
        • 6、 ISBN号码
        • 7、字符环
        • 8、

1、单词的长度

Python小试牛刀(经典例题)[连载中]_第1张图片

def cin():
    return input().split()


x = cin()

print(','.join([str(len(i)) for i in x]))

2、单词翻转

实际上就是对每个单词进行字符串翻转
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致
样例输入
hello world
样例输出
olleh dlrow

太久没做题了,脑子也不好使了,大概是目前用Python写的最长的一次了。

x = input()
l = 0
flag = True
i = 0
len = len(x)
while i < len:
    if flag == True and x[i].isspace() == False:
        l = i
        flag = False
    elif flag == False and x[i].isspace() == True:
        s = x[l:i]
        print(s[::-1],end="")
        flag = True
    if x[i].isspace():
        print(" ",end="")
    i += 1

i = len
i -= 1
while i >= 0:
    if i == 0 or x[i].isspace():
        s = x[i:len]
        print(s[::-1],end="")
        break
    i -= 1

3、回文子串

描述
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入
一个字符串,由字母或数字组成。长度500以内。
输出
输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
样例输入
123321125775165561
样例输出
33
11
77
55
2332
2112
5775
6556
123321
165561

def cin():
    return input().split()

def ok(s):
    l = 0;r = len(s) - 1
    while l <= r:
        if s[l] != s[r]:
            return False
        l += 1;r -= 1
    return True
x = input()
l = len(x)
for i in range(2,l+1):
    j = 0
    while j <= l - i:
        s = x[j:j+i]
        if ok(s):
            print(s)
        j += 1


4、加密的病历单

描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)

  1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
  2. 逆序存储(abcd -> dcba )
  3. 大小写反转(abXY -> ABxy)

输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
样例输入
GSOOWFASOq
样例输出
Trvdizrrvj

考察Python字符与Ascll码的转换

x = list(input())
x = x[::-1]
i = 0;l = len(x)
while i < l:
    if x[i]>='a' and x[i] <= 'z':
        x[i] = x[i].upper()
        a = ord(x[i])+3
        if a > ord('Z') : a = a - ord('Z') + ord('A') - 1
        x[i] = chr(a)
    else:
        x[i] = x[i].lower()
        a = ord(x[i]) + 3
        if a > ord('z'): a = a - ord('z') + ord('a') - 1
        x[i] = chr(a)
    i += 1
print(''.join(x))

5、字符串移位包含问题

描述
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。

输入
一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。
输出
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。
样例输入
AABCD CDAA
样例输出
true

def cin():
    return input().split()

x = cin()
s = x[0]
t = x[1]
if len(s) < len(t) :
    tmp = s;s = t;t = tmp
i = 0;l = len(s)
while i < l:
    t1 = s[:i];t2 = s[i:l]
    t1 = t2 + t1
    if t1.find(t) != -1:
        print("true")
        exit()
    i += 1
print("false")

6、 ISBN号码

描述
识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+„„+2×9=158,然后取158 mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。

输入
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

样例输入
样例 #1: 0-670-82162-4
样例 #2: 0-670-82162-0

样例输出
样例 #1: Right
样例 #2: 0-670-82162-4

x = list(input())
if x[-1] == 'X': res = 10
else: res = int(x[-1])
ans = 0;base = 1
x.pop()
for i in x:
    if str(i).isdigit():
        ans += int(i) * base
        base += 1
ans %= 11
if ans == res:
    print("Right")
else:
    if ans == 10:ans = 'X'
    else: ans = str(ans)
    print("".join(x) + ans)

7、字符环

描述
有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。

输入
一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。
输出
输出一个整数,表示这两个字符环上最长公共字符串的长度。
样例输入
ABCEFAGADEGKABUVKLM MADJKLUVKL
样例输出
6

def cin():
    return input().split()
'''
这类字符串环的问题,比较直接的做法就是破环为链,即s = s * 2 
这样就能比较好的模拟字符串环的问题了,但注意一点,我们截取子串
长度的时候,长度的上边界仍就是原来给出的链的长度
'''
x = cin()
s = x[0];t = x[1]
p = (s if len(s) < len(t) else t) # 挑选长度小的那个串截取子串
n = len(p);p *= 2 # 上边界 ; 破环为链
if len(s) != 1:s = s*2
if len(t) != 1:t = t*2
ans = 0
for i in range(n):# 枚举子串起点
    for j in range(1,n+1):# 枚举截取子串长度
        tmp = p[i:i+j] # 子串
        if s.find(tmp) != -1 and t.find(tmp) != -1:
            ans = max(ans,len(tmp))
print(ans)


8、

你可能感兴趣的:(#,Python)