の一定量を持っている場合、これは私がこれまで持っているものです確認するために使用する任意の文字列にアルファベットの定義します3文字の単語を選んでもらえますが、この部分を動作させることはできません。私は一般的にコーディングするのが初めてで、Pythonは私が学んだ最初の言語なので、おそらく大きなばかげたミスをしているのです。は、後の単語が文字
答えて
words = [word for word in line.split() if len(word) == 3 and all(ch in ascii_lowercase for ch in word)]
あなたはいくつかの良いアイデアを持っているが、関数の合成のようなものが本当に関数型言語のために予約されている(このようなつまり、構文はHaskellでうまくいくでしょう!)
Pythonでは、"a" or "b" or ...
はただ1つの値に評価されますそれはあなたがそれを使用しようとしているような機能ではありません。すべての価値観には「真実性」があります。すべての文字列は空でない場合は「真実」です(例:bool("a") == True
、ただしbool("") == False
)。 "a"
に、より具体的に(最初の値が「truthy」であることからor
は、ここでは何も変わらないので、alphabet
はTrue
に評価されます。
letter_word_3
は、(常にTrue
である、any("a" + "a" + "a")
を行おうと"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)
letter_word_3
が変数関数であり、ではないことが、より論理的です。 は、ここでは、letter_word_3
を実装し、あなたのコードでそれを使用することができます方法は次のとおりです。
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def letter_word_3(word):
return len(word) == 3 and all(x in alphabet for x in word)
print("Testing: ice")
if letter_word_3("ice"):
print("Worked!")
else:
print("Didn't work")
それは関数オブジェクトを印刷するにはあまり意味がありませんので、私はletter_word_3
を印刷する最後の行を削除しました。
alphabet = "abcdefghijklmnopqrstuvwxyz"
letter_word_3 = [a+b+c for a in alphabet for b in alphabet for c in alphabet]
print("Testing: ice")
if "ice" in letter_word_3: # it will search amongst 17000+ strings!
print("Worked!")
else:
print("Didn't work")
print(letter_word_3) # it will print 17000+ strings!
を、これは非常にもちろんです:
は当初、私は間違ってあなたのコードはすべて3文字の文字列を生成し、「氷」は、それらのの間であるかどうかを確認し、次のようにそれを修正に持っていたと仮定しました非効率的なので、しないでください。しかし、議論されて以来、私はここでそれを残します。
あなたは、Pythonについて知っておくべきいくつかの有用なもの:
- 文字列は配列であるので、彼らは(文字単位)反復することができる
x
場合は文字が文字列自体x in sequence
戻りTrue
ですが含まれている。sequence
a or b
a
と評価すると、が、それ以外の場合は、しかし+
と連結することができTrue
b
いくつかの問題があります。最初にalphabet
がであり、常にが"a"
と評価されています。
宣言の中のor
は、「前のものが偽であれば、これを代わりに使用する」という意味です。 "a"
が真実なので、そこで停止します。残りの手紙はPythonでさえ見ていません。
次はany
です。 any
は、iterable
の何かが真であるかどうかをチェックするだけです。 alphabet + alphabet + alphabet
は"aaa"
と評価されているので、letter_word_3
は常にTrue
を返します。
"ice" == letter_word_3
'が"ice" == True
と評価されているかどうかをチェックすると、
任意のワードは3つの文字は、次の手順を使用している最も簡単な方法であるかどうかを確認するには、次の
import re
def is_three_letters(word):
return bool(re.match(r"[a-zA-Z]{3}$", word))
をあなたはその後、
import re
def is_three_letters(word):
return bool(re.match(r"[a-zA-Z\d]{3}$", word))
を使用し、また数字を許可するに
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)
を使用することができます
「h2o」のようなものも3文字の単語と見なされます。
EDIT:
import re
def is_three_letters(word):
return bool(re.match(r"[a-z]{3}$", word))
上記のコードは、小文字(NO数字または大文字)を可能にします。
import re
def is_three_letters(word):
return bool(re.match(r"[a-z\d]{3}$", word))
小文字と数字(大文字は使用できません)のみです。
EDIT:
がのnをチェックするために文字の量を、単に「{3}」あなたは上記のコード内の文字列で、好きな長さに変更します。例えば
import re
def is_eight_letters(word):
return bool(re.match(r"[a-zA-Z\d]{8}$", word))
上記では、大文字、小文字、および数字を許可する8語の単語を探します。
N.B. '[a-zA-Z]'は大文字を許可します –
すべての場合に固定されました。 @アダムスミス – ChristianFigueroa
この最も簡単な実装は、以下の機能を使用することです:
def is_three_letter_word(word):
return len(word) == 3 and word.isalpha()
ので、例えば:all
を使用して
>>> is_three_letters("ice") # True
True
>>> is_three_letters("ICE") # True
True
>>> is_three_letters("four") # False
False
>>> is_three_letters("to") # False
False
>>> is_three_letters("111") # False (numbers not allowed)
False
は大丈夫ですが、構築された使用するよりも速くなりません - 文字列メソッド。さらに、あなたは車輪を再構築すべきではありません。言語が適切な方法を提供する場合は、それを使用する必要があります。
- 1. C文字列:文字列の最後の単語を取得
- 2. Python:単語と単語の比較:最初と最後の文字(アルファベット順)
- 3. 文字列の最後の単語を検索するSQL文
- 4. 検証のみ大文字の単語、単語はREGEX
- 5. ストリップ、大文字の単語
- 6. Animate.css単語の一文字
- 7. 複数の単語が文字列C
- 8. 特定の数字または文字または単語の後の改行
- 9. 特定の単語の後で文字の前に36文字を選択
- 10. 各単語の後に大文字を使用する(。)&文字列の開始
- 11. 文の各単語の文字数
- 12. 文字列内の3文字の単語の最初と最後の文字を大文字にする
- 13. ルア文字列操作(前と後の単語の検索)
- 14. 改行文字の前後の単語を返す
- 15. Swiftで最後の単語を文字列に抽出
- 16. 文字を単語の最後に移動しますか?
- 17. R最後の単語を文字列から削除する
- 18. java最後の単語を文字列から取得する
- 19. 単語の後に文字列を分割する
- 20. 文字列内の単語与えられた単語
- 21. 単語を大文字の単語に置き換えます
- 22. Java関数は単語ゲームに似ていますが、最後の文字=次の単語の最初の文字
- 23. 文字列の単語は、特定の文字が含まれていると
- 24. 文字列中の単語の集合から単語が出現する
- 25. 文書内に単語文書を挿入した後の単語API
- 26. 特定の文字の後の文字列から最後の単語を削除する方法
- 27. 防止if文の単語の後、最後の削除の文字が空白ここに私のスクリプトで
- 28. 単語内の最長の文字列
- 29. 単語内の文字の頻度
- 30. 単語内の文字の頻度
変数 'alphabet'を印刷しましたか? – klutt
@kluttはい、それは常に "a"だけを出力します。私はあなたが 'または'ステートメントを持っているならば、Pythonでかなり確信しています。オプションを指定すると、常に最初の 'または'を実行します。私はアルファベット全体をスキャンして文字を見つけることができるかどうかを確認し、そうであればアルファベットの隣にあるアルファベットの別の文字を見つけて3文字の単語を見つける。 –