【Python 百炼成钢】错位键盘、单词的长度、字母重排

简介: 【Python 百炼成钢】错位键盘、单词的长度、字母重排

前言


前面一篇分享了关于数值的一些处理方式,本篇呢进行一下字符串处理的分享

题目也是超级简单,记录一下对字符串处理的方式

错位键盘🍓(也就是错位字符串,使用错位的字符去匹配原字符)

单词的长度🥝(字符串的分割)

字母重排🤑(子串与主串的匹配,感觉这个匹配方式不错)

Tex括号问题(超级简单,下面见)

下面就步入正题开始我们今天的内容啦😮‍💨


87e12bc0903643fcbf227a7bb67dfa40.png

一、错位键盘🚩


🪐问题描述


在我们打字的时候,往往会因为手误将A敲成S,将S敲成D

现在有一位程序员由于手误输入了一行字符串 请凭借你聪明的大脑将其还原

(键盘上的字符顺序:"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./")

样例输入:O S, GOMR YPFSU/

样例输出:I AM FINE TODAY


🪐问题分析


这类的问题有事后想到的就是进行字符的替换,但是一个键盘上字符那么多逐个替换的话非常的费时费力于是我们可以进行一个下标数组的编排,用于记录字符在字符串中的位置,而为了不必要的转换我们不妨将下标数组开辟到255个这样每一种字符的ASCII值就可以直接作为下标数组的下标拿到他在原来字符串的索引。

然后根据输入可以知道,输入的有空格,给定的键盘内没有空格,所以需要进行分词处理。在Python中分词有极为简便的方法,在C语言中可以开辟一个字符型指针数组,用于存储每一段单词,处理方式与单词的平均长度无异。可以先往下看看。分完词之后可以迭字符型指针数组。然后按序列输出。输出的时候先拿字符做下标取原字符串中的索引,然后再拿索引-1去原字符中取字符。注意输出时候的格式。


🪐代码实现


老规矩先上运行结果:

c7f2b0e31bb64b9e841d5495c334a0b0.png


代码如下:


import sys
s=sys.stdin.readline().strip().split()
indexarr=[0]*255
# 将所有数据存放进一个数组,将键盘上相邻的两个字母在数组中以索引的形式相连
mystr="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"
# 将每一位字母的索引存储起来。供以后遍历输入的数据使用
for i in range(len(mystr)):
    indexarr[ord(mystr[i])]=i
flag=True
#遍历输入的n段字符串
for line in s:
    if flag:
        flag=False
        for i in line:
            print(mystr[indexarr[ord(i)]-1],end="")  
    else:
        print(" ",end="")
        for i in line:
            print(mystr[indexarr[ord(i)]-1],end="")


二、单词的平均长度🚩


这一题使用Python做超级简单
使用c语言做的话先进行空格统计,如果空格后面不为空格就进行单词数加1
如果空格后面依旧是空格向下遍历,如果一个位置不为空格就进行字母数加1
最终要将单词数额外加1,因为首尾单词循环的时候只统计进去了一个。


🪐问题描述


输入若干个单词,单词只包含字母,每个单词由一个或多个空格组成

输出单词的平均长度

样例输入:qwe qwe qwe

样例输出:3.0


🪐问题分析


对字符串进行分词,然后求每一个字串的长度,再将长度和除以单词的个数


🪐代码实现


老规矩先上运行结果:


d27c649a41bb468c8da092c472a7c71a.png


代码如下:


import sys
num=0
n=0
# 这里使用strip()去除输入的末尾换行符
# 使用split()进行字符串分段最后得到的是一个列表形式
mystr=sys.stdin.readline().strip().split()
for i in mystr:
    num+=len(i)
    n+=1
print(num/n)


三、字母重排🚩


🪐问题描述


输入一个字典(*****结尾),然后再输入若干单词。每输入一个单词w,你都需要

在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一

行中输出(如果不存在,输出:0。输入单词之间用空格或空行隔开,且所有输入单词都由

不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。

样例输入:

第一行 tarp given score refund only trap work earn course pepper part

第二行 resco nfudre aptr sett oresuc

样例输出:

course part refund score tarp trap


🪐问题分析


给出一个字典,所以我们在进行查找的时候可以先将字典进行处理,然后依照字典的标准进行查词

这里我们可以先对字典进行排序得到首字母有序的字典,然后对字典中每一个元素进行排序。

对要查询的子串进行排序,然后遍历有序字典进行查找,找到直接输出(也就是说将标准的字典按

一定的方式处理,然后将所要查的词经过相同的转换后与字典进行比对)


🪐代码实现


老规矩先上运行结果:


ef47c71cb91d44e1a58635b499f3838f.png


代码如下:


import sys
# 元字典序字符串
mydic=list(sys.stdin.readline().strip().split())
mydic=sorted(mydic)
words=sys.stdin.readline().strip().split()
# 排序后的字符串
newdic=[]
newwords=[]
for i in mydic:
    # 字符串不可以直接排序,先转换成字典,然后进行排序
    newdic.append("".join(sorted(i)))
for i in words:
    newwords.append("".join(sorted(i)))
flag=False
i=0
while i<len(newdic):
    if newdic[i] in newwords:
        if not flag:
            print(mydic[i],end="")
            flag=True
        else:
            print(" ",mydic[i],end="")
    i+=1
if not flag:
    print(0)


四、Tex括号问题🚩


🪐问题描述


有一篇文章,在撰稿的时候,没有按照指定格式编排,现在需要将包含’’ 的标点符号转换成为


只有中文双引号的文章“”

样例输入:"anksdn,'dasd,“hhihi”

样例输出:“anksdn,”dasd,“hhihi”


🪐问题分析


这里与前面提到的灯光模拟非常的类似,只需要记性标记位的整顿就好

可以设计一个标记flag,当flag为True时遇见"进行左引号“的输出然后

立即将标记变为与其相反的值当flag为false时遇见"立即进行右引号输出。

然后将flag标记为True


🪐代码实现


老规矩先上运行结果:


57ec418fc97641159c3280181e08b305.png


代码如下:


import sys
s=sys.stdin.readline().strip()
flag=True
for i in s:
    if i=="'" or i=="\"":
        if flag:
            print("“",end="")
        else:
            print("”",end="")
        flag=not flag
        continue
    print(i,end="")


相关文章
|
6天前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
9 1
|
24天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
18 1
|
10天前
|
人工智能 开发工具 Python
[oeasy]python040_缩进几个字符好_输出所有键盘字符_循环遍历_indent
本文探讨了Python代码中的缩进问题。通过研究`range`函数和`for`循环,发现缩进对于代码块的执行至关重要。如果缩进不正确,程序会抛出`IndentationError`。文章还介绍了Python的PEP8规范,推荐使用4个空格进行缩进,并通过示例展示了如何使用Tab键实现标准缩进。最后,通过修改代码,输出了从0到122的字符及其对应的ASCII码值,但未能找到竖线符号(`|`)。文章在总结中提到,下次将继续探讨竖线符号的位置。
9 0
|
1月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
41 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
1月前
|
监控 Python
用 Python 操作你的鼠标和键盘
用 Python 操作你的鼠标和键盘
37 2
|
1月前
|
小程序 IDE 开发工具
Python编写单词复习小程序
Python编写单词复习小程序
|
2月前
|
Python
6-18|Python画字母H
6-18|Python画字母H
|
3月前
|
监控 Python Windows
Python如何接收键盘按键
根据你的应用场景(控制台应用、GUI应用或需要监控按键事件的应用),可以选择适当的方法来接收键盘输入。对于交互式命令行脚本,`input()`或 `getch`类函数通常就足够。对于更复杂的键盘交互,如监控全局按键或构建含有图形用户界面的应用程序,则需要使用如 `pynput`或GUI特有的库函数来实现。
69 1
|
3月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
41 4
|
3月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
38 3