Python如何将给定字符串中的大写英文字母按以下对应规则替换

 更新时间:2021年10月14日 11:41:22   作者:硕子鸽  
这篇文章主要介绍了Python如何将给定字符串中的大写英文字母按以下对应规则替换,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

问题描述

输入样例:

Only the 11 CAPItal LeTtERS are replaced

输出样例:

Only the 11 XZKItal OeGtVIH are replaced

解题思路

首先想到的是使用字典匹配字符然后遍历替换,其次想到的是使用ASCLL码,后者更为方便简单。

思路一

inp = input()
dist = ['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']
for i in inp:
    if i in dist:
        index = dist.index(i)
        inp = inp.replace(i, dist[-index - 1])
print(inp)

思路二

str = input()
for i in str:
    num = ord(i)  # 得到ASCII码
    if (65 <= num <= 90):  # 如果是大写字母
        str = str.replace(i, chr(155 - num))
print(str)

遇到的问题:

在思路二中,我之前的代码是这样的:

str = input()
def replace(str):
    for i in str:
        num = ord(i)  # 得到ASCII码
        if (num >= 65 & num <= 90):  # 如果是大写字母
            i = chr(155 - num)
    return str
replace(str)
print(str)

后来意识到 i 只是一个变量,转瞬即逝,我并没有把它存住。

然后想到的用 replace()函数:

str = input()
for i in str:
    num = ord(i)  # 得到ASCII码
    if (65 <= num <= 90):  # 如果是大写字母
        str.replace(i, chr(155 - num))
print(str)

但是还是不对,因为我没有存储 replace()函数的返回值,导致虽然替换了,但是没有存储它,所以结果没有变化。

最终的代码就是上的那个了,看起来完美无缺,但是全部都是做的,为什么?

输入:

Only the 11 CAPItal LeTtERS are replaced

输出:

Only the 11 XZKItal OeGtVIH are replaced

可以看到除了第一个 O 之外其他的都对,那为什么 O 没有换呢?

其实它换了,只是换了两次,负负得正,又回来了。

因为 replace()方法会把字符串中所有符合条件的字母替换掉。

比如输入 OL ,我们想要的结果为 LO,但上述代码实际上输出的是 OO;

第一次循环把 O 替换成了 L ,此时字符串为 LL;

第二次循环,把所有的 L 都替换成了 O,所以输出结果为 OO。

解决方案:

首先想到的是定义一个对象存储当前的值和一个标记,替换之前先看它是否被访问过了,如果被访问过了就跳过。

还有一种方法就是拼接字符串,让 replace 方法只作用于当前字符。

最终答案

str = input()
newStr = ''
for i in str:
    num = ord(i)  # 得到ASCII码
    if (65 <= num <= 90):  # 如果是大写字母
        i = i.replace(i, chr(155 - num))
    newStr += i
print(newStr)

还有更简单的方法:

str = input()
newStr = ''
for i in str:
    if i.isupper():
        newStr += chr(155 - ord(i))
    else:
        newStr += i
        
print(newStr)

python实现26个英文字母按规则输出

import string
n=eval(input())
s=string.ascii_uppercase
for i in s:
print(i,end='')
if (s.find(i)+1)%n==0:
print()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python操作MySQL数据库的简单步骤分享

    Python操作MySQL数据库的简单步骤分享

    这篇文章主要给大家介绍了关于Python操作MySQL数据库的简单步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • wx.CheckBox创建复选框控件并响应鼠标点击事件

    wx.CheckBox创建复选框控件并响应鼠标点击事件

    这篇文章主要为大家详细介绍了wx.CheckBox创建复选框控件并响应鼠标点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 如何用用Python制作NFT区块链作品

    如何用用Python制作NFT区块链作品

    在本文中,我们将学习如何使用 Brownie、Python 和 Chainlink 来制作非同质化的 NFT 作品,并在 OpenSea NFT 市场上展示和销售我们的成果。
    2021-06-06
  • Python中ini配置文件读写的实现

    Python中ini配置文件读写的实现

    本文主要介绍了Python中ini配置文件读写的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Flask框架Flask-Principal基本用法实例分析

    Flask框架Flask-Principal基本用法实例分析

    这篇文章主要介绍了Flask框架Flask-Principal基本用法,结合实例形式分析了Flask框架flask-principal扩展的基本功能、安装、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-07-07
  • 详解如何修改python中字典的键和值

    详解如何修改python中字典的键和值

    这篇文章主要介绍了详解如何修改python中字典的键和值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python开发sdk模块的方法

    python开发sdk模块的方法

    这篇文章主要介绍了python开发sdk模块,通过setup.py将框架安装到python环境中,开发成第三方模块来, 以此来调用,增加使用方便及安全高效性,需要的朋友可以参考下
    2022-07-07
  • Python综合应用名片管理系统案例详解

    Python综合应用名片管理系统案例详解

    这篇文章主要介绍了Python综合应用名片管理系统,结合具体案例形式详细分析了Python名片管理系统相关步骤、原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-01-01
  • Pycharm安装第三方库并更换镜像的详细教程

    Pycharm安装第三方库并更换镜像的详细教程

    在使用pycharm学习python的时候,经常需要第三方库,没有第三方库程序就会报错,pycharm也会提醒你要安装所需要的库,下面这篇文章主要给大家介绍了关于Pycharm安装第三方库并更换镜像的详细教程,需要的朋友可以参考下
    2023-05-05
  • Python3利用Qt5实现简易的五子棋游戏

    Python3利用Qt5实现简易的五子棋游戏

    这篇文章主要为大家详细介绍了Python3利用Qt5实现简易的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论