初學者在這里——給定一個字串,我的代碼必須檢測它是否是一個全字符。如果是,則回傳 True,否則回傳 False。它應該忽略數字和標點符號。
當給出“ABCD45EFGH,IJK,LMNOPQR56STUVW3XYZ”時,它回傳none,當給出“This not a pangram! is not an pangram”時,它回傳none。當答案應該是 False 時,它??回傳 True。
這不是表情包!不是 pangram。我沒有看到什么?
import string
def is_pangram(s):
singlechar = set(s)
list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for index, item in enumerate(singlechar):
if item in list:
list.remove(item)
if list:
return True
break
if not list:
return False
uj5u.com熱心網友回復:
集合是檢查某物是否屬于兩個集合的交集或不屬于兩個集合中的一個集合的好方法。
在您的情況下,如果您的短語中的字母集與字母 az 之間的交集長度為 26,則它是一個 pangram。
from string import ascii_lowercase
def is_pangram(s):
return len(set(s.lower()).intersection(ascii_lowercase)) == 26
uj5u.com熱心網友回復:
您可以繼續使用集合及其方法.difference來找出所有字符集中是否有更多字符或沒有差異(在此之前您需要從標點符號(和空格)中去除字串并使其小寫(由.lower和.translate和.maketrans字串的方法完成)):
import string
def is_pangram(s):
input_set = set(s.lower().translate(
str.maketrans('', '', f'{string.punctuation} ')))
check_set = set(string.ascii_lowercase)
return not check_set.difference(input_set)
value1 = 'The quick brown fox jumps over a lazy dog!'
print(is_pangram(value1))
# True
value2 = 'This isn\'t a pangram! is not a pangram'
print(is_pangram(value2))
# False
如果你仍然想用一個串列來做:
def is_pangram(s):
input_set = set(s.lower().translate(
str.maketrans('', '', f'{string.punctuation} ')))
lst = list(string.ascii_lowercase)
for item in input_set:
if item in lst:
lst.remove(item)
if not lst:
return True
return False
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336811.html
上一篇:減少“同時讀取”回圈的處理時間
