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是我学过的第一种语言,所以我可能犯了一个很大的愚蠢错误.
你有一些好的想法,但这种函数的组合实际上是为函数式语言保留的(即这样的语法在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)
有几件事是错的.首先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)
上面将查找允许大写,小写和数字的八个长词.
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)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |