检测字符串中的字母序列

2024-10-01 00:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个杂烩。它很有效而且很简单。我做了一个是为了好玩,我觉得代码太长了。它有1000多行长而且很简单。我只想把它缩短一点。 我是这样做的:

wordorg = raw_input("Enter a word here: ")

## Checking if what you typed is correct
if len(wordorg) <= 10 and len(wordorg) > 1 and wordorg.isalpha():
  ## Comparison (JESUS THIS IS A LONG PIECE OF CODE)
  print "Your original word was: " + wordorg
  word = wordorg.lower()
  if len(word) >= 1:
    if word[0] == "a":
        one = a
    if word[0] == "b":
        one = b
    if word[0] == "c":

布拉布拉布拉布拉,你明白了,就这样。当它到达Z时

    if word[0] == "z":
      one = z
    if len(word) >= 2:
      if word[1] == "a":

而且还在继续。我的问题是,如何缩短代码?你知道吗

编辑: 整数a,b,c的定义如下:

a = 2
b = 3
c = 5

等等。你知道吗


Tags: and代码inputrawlenifherewhat
3条回答

您可以使用dict将行数除以26:

>>> import string
>>> translate = {l:i for i,l in enumerate(string.ascii_lowercase, 1)}
>>> translate
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10, 'k': 11, 'l': 12, 'm': 13, 'n': 14, 'o': 15, 'p': 16, 'q': 17, 'r': 18, 's': 19, 't': 20, 'u': 21, 'v': 22, 'w': 23, 'x': 24, 'y': 25, 'z': 26}

现在,您只需要一个dict查找,而不是26if

>>> word='something'
>>> translate[word[0]]
19
>>> translate[word[1]]
15

您可以替换12。。。值定义为ab。。。在你的代码里。你知道吗

如果你想对每个字母都这样做,只需使用一个列表:

>>> [translate[letter] for letter in word]
[19, 15, 13, 5, 20, 8, 9, 14, 7]

您现在有了一个整数列表,可以进一步处理了!你知道吗

我不知道你从你给出的代码片段中到底去了哪里,但我建议你从以下几点开始:

[1+ord(chr)-ord('a') for chr in wordorg]

ord是返回字符(a=97、b=98等)的ascii码的函数。因此1+ord(chr)-ord('a')将返回1表示“a”,2表示“b”,等等

在哈希函数中不使用字典似乎更有趣,因为字典本身就是一个哈希表。你知道吗

我想这正是你想要的。我所做的是建立一个循环,运行在你的话,所以它可以比较一个字母一个字母。第二个循环遍历字母表中的字母,如果您的单词字母有匹配项,则存储在数组结果中。此数组统计每个字母的出现次数。如果需要,可以将print语句替换为写入文件。也没有必要再限制你的代码在短词上运行了。你知道吗

import string

alphabet = string.ascii_lowercase
results = [0] * len(alphabet) # array to count occurrences of letters
wordorg = raw_input("Input word here: ")

print alphabet
if wordorg.isalpha():

    for i in range(len(wordorg)):
            for j in range(len(alphabet)):
                if (wordorg[i].find(alphabet[j])!=-1):
                    results[j] += 1

        # print results



    for i in range(len(alphabet)):
        if (results[i]>0):
            print "There are %d occurrences of the letter %s" %(results[i], alphabet[i])

相关问题 更多 >