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如何生成随机密码

    利用Python如何生成随机密码

    这篇文章主要为大家详细介绍了利用Python如何生成随机密码的相关方法,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • python析构函数用法及注意事项

    python析构函数用法及注意事项

    在本篇文章里小编给大家整理的是一篇关于python析构函数用法及注意事项,有需要的朋友们可以学习参考下。
    2021-06-06
  • Python中Selenium模拟JQuery滑动解锁实例

    Python中Selenium模拟JQuery滑动解锁实例

    这篇文章主要介绍了Python中Selenium模拟JQuery滑动解锁实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • django之自定义软删除Model的方法

    django之自定义软删除Model的方法

    这篇文章主要介绍了django之自定义软删除Model的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python Celery定时任务的示例

    python Celery定时任务的示例

    这篇文章主要介绍了python Celery定时任务的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python 图像处理画一个正弦函数代码实例

    python 图像处理画一个正弦函数代码实例

    这篇文章主要介绍了python 图像处理画一个正弦函数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • pytest自动化测试中的fixture的声明和调用

    pytest自动化测试中的fixture的声明和调用

    这篇文章主要为大家介绍了pytest自动化测试中的fixture的声明和调用,文中含有详细示例操作有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • python 输出所有大小写字母的方法

    python 输出所有大小写字母的方法

    今天小编就为大家分享一篇python 输出所有大小写字母的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python如何修改装饰器中参数

    python如何修改装饰器中参数

    这篇文章主要为大家详细介绍了python如何修改装饰器中参数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python使用itchat模块实现群聊转发,自动回复功能示例

    Python使用itchat模块实现群聊转发,自动回复功能示例

    这篇文章主要介绍了Python使用itchat模块实现群聊转发,自动回复功能,结合实例形式分析了Python基于itchat模块针对微信信息的发送、回复等相关操作技巧,需要的朋友可以参考下
    2019-08-08

最新评论