pythonを取得して、文字列にアルファベットとスペースのみが含まれていることを返すようにしています
string = input("Enter a string: ")
if all(x.isalpha() and x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
please
を試しましたが、Only alphabetical letters and spaces: no
と表示されます。or
の代わりにand
を使用しましたが、1つの条件を満たすだけです。両方の条件を満たす必要があります。つまり、文には文字のみおよびスペースのみが含まれている必要がありますが、各種類が少なくとも1つ含まれている必要があります。 not数字を含める必要があります。
文字とスペースの両方を返すためにpythonは文字列にのみ含まれているため、ここで何が欠けていますか?
文字をアルファおよびスペースにすることはできません。アルファまたはスペースにすることができます。
文字列にアルファとスペースのみが含まれていることを要求するには:
string = input("Enter a string: ")
if all(x.isalpha() or x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
文字列に少なくとも1つのアルファと少なくとも1つのスペースが含まれていることを要求するには:
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
文字列に少なくとも1つのアルファ、少なくとも1つのスペース、およびアルファとスペースのみが含まれていることを要求するには、次のようにします。
if (any(x.isalpha() for x in string)
and any(x.isspace() for x in string)
and all(x.isalpha() or x.isspace() for x in string)):
テスト:
>>> string = "PLEASE"
>>> if (any(x.isalpha() for x in string)
... and any(x.isspace() for x in string)
... and all(x.isalpha() or x.isspace() for x in string)):
... print "match"
... else:
... print "no match"
...
no match
>>> string = "PLEASE "
>>> if (any(x.isalpha() for x in string)
... and any(x.isspace() for x in string)
... and all(x.isalpha() or x.isspace() for x in string)):
... print "match"
... else:
... print "no match"
...
match
正しい解決策はor
を使用します。
_string = input("Enter a string: ")
if all(x.isalpha() or x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
_
文字列はありますが、その文字列の文字を繰り返し処理しているため、一度に1文字ずつ使用できます。したがって、文字だけをアルファベットとスペースにすることはできませんが、制約を満たすには2つのうちの1つである必要があります。
編集:他の回答であなたのコメントを見ました。 alphabet = string.isalpha()
return True
、文字列内のall文字がアルファベット文字である場合に限ります。スペースのある文字列yes
で実行すると、コードでplease
を出力するように指定したため、これは必要なことではありません。文字列全体ではなく、各文字を個別にチェックする必要があります。
コードが本当に正しいことを納得させるためだけに(まあ、わかりました、納得させるには自分で実行する必要がありますが、とにかく):
_>>> string = "please "
>>> if all(x.isalpha() or x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
Only alphabetical letters and spaces: yes
_
編集2:新しいコメントから判断すると、次のようなものが必要です。
_def hasSpaceAndAlpha(string):
return any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string)
>>> hasSpaceAndAlpha("text# ")
False
>>> hasSpaceAndAlpha("text")
False
>>> hasSpaceAndAlpha("text ")
True
_
または
_def hasSpaceAndAlpha(string):
if any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
>>> hasSpaceAndAlpha("text# ")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text ")
Only alphabetical letters and spaces: yes
_
文字列にそれぞれを少なくとも1つ必要とする場合は、 any が必要です。
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
それぞれの文字を少なくとも1つ必要とし、他の文字は必要ない場合は、all
、any
と str.translate を組み合わせることができます。以下では、少なくとも1つのスペース、1つのアルファがあり、それらのみが含まれている場合にのみTrue
を返します。文字。
from string import ascii_letters
s = input("Enter a string: ")
tbl = {ord(x):"" for x in ascii_letters + " "}
if all((any(x.isalpha() for x in s),
any(x.isspace() for x in s),
not s.translate(tbl))):
print("all good")
それぞれにany
が少なくとも1つあるかどうかを確認してから、文字列を変換します。文字列が空の場合は、英字とスペースしかありません。これは大文字と小文字で機能します。
コードを単一のif/and
に凝縮できます。
from string import ascii_letters
s = input("Enter a string: ")
s_t = s.translate({ord(x):"" for x in ascii_letters})
if len(s_t) < len(s) and s_t.isspace():
print("all good")
翻訳された文字列の長さが<オリジナルで、残っているのがスペースだけの場合、要件を満たしています。
または、ロジックを逆にしてスペースを変換し、アルファだけが残っているかどうかを確認します。
s_t = s.translate({ord(" "):"" })
if len(s_t) < len(s) and s_t.isalpha():
print("all good")
文字列には常にスペースよりも多くのアルファがあると仮定すると、最後の解決策がはるかに効率的であるはずです。
実はパターンマッチングの練習なので、パターンマッチングを使ってみませんか?
_import re
r = re.compile("^[a-zA-Z ]*$")
def test(s):
return not r.match(s) is None
_
または、ソリューションでany()
を使用するための要件はありますか?
string = input("Enter a string: ")
st1=string.replace(" ","").isalpha()
if (st1):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")