9

文字列を入力として受け取り、その文字列がパングラムかどうかをチェックする関数を作成したいと思います (パングラムはアルファベットのすべての文字を含むテキストです)。

私は次のコードを書きましたが、これは機能しますが、それを行う別の方法、うまくいけば短縮された方法を探しています。

import string

def is_pangram (gram):
    gram = gram.lower()
    gram_list_old = sorted([c for c in gram if c != ' '])
    gram_list = []
    for c in gram_list_old:
        if c not in gram_list:
            gram_list.append(c)
    if gram_list == list(string.ascii_lowercase): return True
    else: return False

この質問はこのウェブサイトの規則に違反しているように感じますが、そうでないことを願っています。私はただ興味があり、これを行う別の方法を見たいと思っています。

4

15 に答える 15

4

次のような単純なものを使用できます。

import string
is_pangram = lambda s: all(c in s.lower() for c in string.ascii_lowercase)
于 2014-07-16T02:48:25.500 に答える
3

セットはメンバーシップ テストに最適です。

>>> import string
>>> candidate = 'ammdjri * itouwpo ql ? k @ finvmcxzkasjdhgfytuiopqowit'
>>> ascii_lower = set(string.ascii_lowercase)

候補から空白と句読点を取り除き、テストします。

>>> candidate_lower = ascii_lower.intersection(candidate.lower())
>>> ascii_lower == candidate_lower
False

不足しているものを見つけます。

>>> ascii_lower.symmetric_difference(candidate_lower)
set(['b', 'e'])

もう一度試してみてください。ただし、不足している文字を追加してください。

>>> candidate = candidate + 'be'
>>> candidate_lower = ascii_lower.intersection(candidate.lower())
>>> ascii_lower == candidate_lower
True
>>>
于 2014-07-16T03:36:30.507 に答える
-1
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {

        String s;
        char f;
         Scanner in = new Scanner(System.in);
        s = in.nextLine();

        char[] charArray = s.toLowerCase().toCharArray();
        final Set set = new HashSet();

        for (char a : charArray) {
            if ((int) a >= 97 && (int) a <= 122) {
                f = a;
                set.add(f);
            }

        }
        if (set.size() == 26){
            System.out.println("pangram");
        }
        else {
            System.out.println("not pangram");
        }
    }
}
于 2015-12-13T09:37:45.320 に答える