• 字符串相关问题


    1.凯撒密码

     1 描述:
     2 凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符
     3 循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
     4 
     5 原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
     6 密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
     7 
     8 对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26
     9 
    10 上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26
    11 
    12 假设用户可能使用的输入仅包含小写字母a~z和空格,请编写一个程序,对输入字符串进行凯撒密码加密,
    13 直接输出结果,其中空格不用进行加密处理。使用input()获得输入。
    14 
    15 
    16 输入:
    17 python is good
    18 输出:
    19 sbwkrq lv jrrg

    代码实现:

     1 # 转换字符
     2 def change(c, i):
     3     c = c.lower()
     4     num = ord(c)
     5     if num >= 97 and num <= 122:
     6         num = 97 + ((num - 97) + i) % 26
     7     return chr(num)
     8 
     9 
    10 # 输入字符串并转换字符串
    11 def kaisa_jiami():
    12     s = input("")
    13     s_new = ""
    14 
    15     for i in range(len(s)):
    16         s_new += change(s[i], 3)
    17 
    18     print(s_new)
    19 
    20 
    21 kaisa_jiami()

    2.格式化输出

     1 name = input("name: ")
     2 age = int(input("age: "))
     3 job = input("job: ")
     4 hometown = input("hometown: ")
     5 
     6 infos = """
     7 ----------- info of %s ----------
     8 Name:       %s               
     9 Age:        %d               
    10 Job:        %s                 
    11 Hometown:   %s                   
    12 ---------- end ------------------
    13 """ % (name, name, age, job, hometown)
    14 
    15 print(infos)
     1 # __author__ = "wyb"
     2 # date: 2018/4/15
     3 # 进度条
     4 
     5 import time
     6 scale = 50
     7 print("执行开始".center(scale//2, "-"))
     8 # 计算开始时间
     9 start = time.time()
    10 for i in range(scale+1):
    11     a = '*' * i
    12     b = '.' * (scale - i)
    13     # 计算执行的比例
    14     c = (i/scale)*100
    15     # 计算进过的时间
    16     dur = time.time() - start
    17     # 输出进度条
    18     # 
    表示不换行继续在此行输出,并且此时的输出将覆盖前面的输出
    19     print("
    {:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end='')
    20     # 程序休眠0.1秒
    21     time.sleep(0.1)
    22 print("
    "+"执行结束".center(scale//2, '-'))

    3.检测重复单词

    1 需求:
    2 一段英文文本,其中有两个单词连续重复了2次,编写程序检查重复的单词并只能保留一个
    3 例如: 文本内容: This is is a desk   输出内容: This is a desk

    解决思路1: 先分割字符串提取出每一个单词,再检测是否有字符重复并取出重复的字符,最后删除重复的字符串(保留一个)(最后使用两层循环)

     1 str = input(">>>")
     2 
     3 # 分割字符串-》把字符串中的单词提取出
     4 s = str.split()
     5 print(s)
     6 
     7 # 检查是否有字符重复并取出重复的字符
     8 res = []
     9 for i in range(len(s)-1):
    10     if s[i] == s[i+1]:
    11         if s[i] not in res:
    12             res.append(s[i])
    13 
    14 print(res)
    15 
    16 # 删除重复的字符(保留一个)
    17 r = []
    18 for i in res:
    19     count = 0
    20     for j in s:
    21         if j == i and count == 0:
    22             count += 1
    23             r.append(j)
    24         elif j == i and count != 0:
    25             count += 1
    26         else:
    27             r.append(j)
    28 
    29 print(r)
    30 
    31 for i in r:
    32     print(i, end=" ")

    注:  以上代码存在bug,当输入为This is is a desk a a a时输出错误!bug产生的原因是如果有多个单词重复的话,就会遍历单词字符串多一遍

    解决思路2: 先分割字符串提取出每一个单词,再检测是否有字符重复并取出重复的字符,最后删除重复的字符串(保留一个)(最后使用一层循环)

     1 str = input(">>>")
     2 
     3 # 分割字符串-》把字符串中的单词提取出
     4 s = str.split()
     5 # 分割字符串后的结果:
     6 print(s)
     7 
     8 # 检查是否有单词重复并取出重复的单词
     9 res = []
    10 for i in range(len(s)-1):
    11     if s[i] == s[i+1]:
    12         if s[i] not in res:
    13             res.append(s[i])
    14 # 输出重复的单词
    15 print(res)
    16 
    17 # 删除重复的字符(保留一个)
    18 r = []
    19 
    20 count = 0
    21 for j in s:
    22     if j in res and count == 0:
    23         r.append(j)
    24         count = 1
    25     elif j in res and count == 1:
    26         continue
    27     else:
    28         r.append(j)
    29         count = 0
    30 
    31 # 输出最后的结果:
    32 for i in r:
    33     print(i, end=" ")

    4.统计字符

     1 # __author__ = "wyb"
     2 # date: 2018/3/16
     3 
     4 import string
     5 import random
     6 
     7 x = string.ascii_letters + string.digits + string.punctuation #包括小写大写字母和符号
     8 print(x)
     9 y = [random.choice(x) for i in range(100)]          # 随机在x中选择100个字符
    10 print(y)
    11 z = ''.join(y)          # 连接可迭代序列中的每个字符串
    12 print(z)
    13 d = dict()
    14 for ch in z:
    15     # 如果ch不在字典中,自动创建并赋值为1,然后加一,存在则直接把值加一
    16     d[ch] = d.get(ch, 0) + 1
    17 
    18 print(d)

    5.去掉字符串中的空格

    (1)去掉开头和结尾的空格

    1 >>> s = "   abcdefghyjklmn  "
    2 >>> s = s.strip()
    3 >>> s
    4 'abcdefghyjklmn'

    (2)去掉字符串中间的空格

    1 >>> s = "   123    666     888   999   "
    2 >>> s = ''.join(s.split())
    3 >>> s
    4 '123666888999'
  • 相关阅读:
    最小覆盖圆算法
    hdu2202(最大三角形 )凸包
    hdu1392(凸包)
    hdu1348
    凸包模板
    凸包算法
    DataTable和List互转
    没有功能需求设计文档?对不起,拒绝开发!【分享】
    [分享]浅谈分布式数据库
    微信公众号授权,支付,退款总结【shoucang】
  • 原文地址:https://www.cnblogs.com/wyb666/p/8796756.html
Copyright © 2020-2023  润新知