将字母表定义为任何字母字符串,然后用于检查单词是否具有一定数量的字符

Eth*_*Rae 5 python words character cpu-word alphabet

这是我到目前为止:

alphabet = "a" or "b" or "c" or "d" or "e" or "f" or \
           "g" or "h" or "i" or "j" or "k" or "l" or \
           "m" or "n" or "o" or "p" or "q" or "r" or \
           "s" or "t" or "u" or "v" or "w" or "x" or \
           "y" or "z"

letter_word_3 = any(alphabet + alphabet + alphabet)

print("Testing: ice")

if "ice" == letter_word_3:

    print("Worked!")

else:

    print("Didn't work")

print(letter_word_3) # just to see
Run Code Online (Sandbox Code Playgroud)

我希望能够最终扫描一个文件并让它挑出3个字母的单词,但我无法让这部分工作.我是一般的编码新手,python是我学过的第一种语言,所以我可能犯了一个很大的愚蠢错误.

Ada*_*ith 5

你有一些好的想法,但这种函数的组合实际上是为函数式语言保留的(即这样的语法在Haskell中运行良好!)

在Python中,只"a" or "b" or ...评估一个值,它不是像你试图使用它的函数.所有价值观都具有"真实性".如果它们不是空的(例如bool("a") == True,但是bool("") == False),所有字符串都是"真实的" .or这里没有改变任何东西,因为第一个值是"真实的",所以alphabet评估为True(更具体地说是"a".

letter_word_3然后尝试做any("a" + "a" + "a"),这总是True(因为"a"是真的)


你应该做的是长度检查每个单词,然后检查每个字母以确保它在"abcdefghijklmnopqrtuvwxyz".等一下,你注意到我刚刚介绍的错误了吗?再次读取该字符串.我忘记了"s",你也可以!幸运的是,Python的stdlib有一个方便的字符串给你.

from string import ascii_lowercase  # a-z lowercase.

def is_three_letter_word(word):
    if len(word) == 3:
        if all(ch in ascii_lowercase for ch in word):
            return True
    return False

# or more concisely:
# def is_three_letter_word(word):
#     return len(word) == 3 and all(ch in ascii_lowercase for ch in word)
Run Code Online (Sandbox Code Playgroud)


Chr*_*roa 5

有几件事是错的.首先alphabet始终被评价"a".

or宣言只是意味着"如果前面的东西是假的,用这个来代替." 既然"a"是真的,那就停在那里.这封信的其余部分甚至都没有被Python看过.

接下来是any.any只检查a中的某些内容iterable是否为真.alphabet + alphabet + alphabet被评估为"aaa",因此letter_word_3总是返回True.

当您检查"ice" == letter_word_3'它是否被评估为"ice" == True.

要检查任意单词是否为三个字母,最简单的方法是使用以下内容:

import re
def is_three_letters(word):
    return bool(re.match(r"[a-zA-Z]{3}$", word))
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

is_three_letters("ice") # True
is_three_letters("ICE") # True
is_three_letters("four") # False
is_three_letters("to") # False
is_three_letters("111") # False (numbers not allowed)
Run Code Online (Sandbox Code Playgroud)

要同时允许数字,请使用

import re
def is_three_letters(word):
    return bool(re.match(r"[a-zA-Z\d]{3}$", word))
Run Code Online (Sandbox Code Playgroud)

这将允许像"h2o"这样的东西也被认为是一个三个字母的单词.

编辑:

import re
def is_three_letters(word):
    return bool(re.match(r"[a-z]{3}$", word))
Run Code Online (Sandbox Code Playgroud)

上面的代码只允许使用小写字母(没有数字或大写字母).

import re
def is_three_letters(word):
    return bool(re.match(r"[a-z\d]{3}$", word))
Run Code Online (Sandbox Code Playgroud)

那将只允许使用小写字母和数字(没有大写字母).

编辑:

要检查n个字母数量,只需将"{3}"更改为上面代码中字符串中所需的任何长度.例如

import re
def is_eight_letters(word):
    return bool(re.match(r"[a-zA-Z\d]{8}$", word))
Run Code Online (Sandbox Code Playgroud)

上面将查找允许大写,小写和数字的八个长词.


Eth*_*Rae 0

words = [word for word in line.split() if len(word) == 3 and all(ch in ascii_lowercase for ch in word)]
Run Code Online (Sandbox Code Playgroud)