ホームページ >バックエンド開発 >Python チュートリアル >初心者の練習に最適な 3 つの興味深い Python の質問
Python を知っている友人は、Python は簡単に始められるものの、多くの知識が必要であり、非常に熟練する必要があることを知っています。これらのスキルは連鎖しているため、知識をしっかりと習得するにはある程度の練習が必要です。今日は、編集者が Python の興味深い問題を 3 つ厳選しました。一緒に指を動かして練習しましょう。
以下のエディターは、新人と専門家がそれぞれこの問題にどのように対処するかを示します:
NO.1 文字列内の文字の置換
文字列は Python の最も基本的かつ重要な知識ポイントです。次の質問は文字列の置換についてです。
入力文字列を処理し、特定の文字を置換した文字列を返す関数を作成します。ルールは次のとおりです。
· 文字が大文字の子音の場合、この文字を " に置き換えてください。鉄"。
· 文字が小文字の子音またはアルファベット以外の文字の場合、その文字には何もしません。
· 文字が大文字の母音の場合、文字を「 Iron」に置き換えます。ヤード"。
· 文字が小文字の母音の場合は、その文字を「Yard」に置き換えます。
テスト ケース
入力: "Hello WORLD!"
出力: "IronYardllYard IronIron YardIronIronIron!"
初心者向けソリューション:
def replace_str(string): res = "" vowel = 'aeiou' for i in string: if i in vowel: res += 'Yard' elif i in vowel.upper(): res += 'Iron Yard' elif i.isupper(): res +='Iron' else: res += i return res print(replace_str('Hello WORLD!'))
マスターの解決策:
def tiy_fizz_buzz(s): return "".join(("Iron "*c.isupper() + "Yard"*(c.lower() in "aeiou")).strip() or c for c in s)
コメント:
専門家にとって最も賢い解決策は、リストにプッシュして文字列をループするような方法を使用するのではなく、「Iron」*True を使用することです。または " Iron"*False (前者が文字列自体であり、後者が空の場合)""。次に、 を使用して 2 つの文字列を合成し、 または を使用して分類します。上記の if-elif-elif-else が 1 行のコードに完全に統合されており、これは非常に優れています。
NO.2 興味深い体重ランキング
Xiaoli さんは「減量クラブ」に所属しています。毎月の終わりには、Xiaoli さんはとても体重が増えます。メンバーの体重リストが毎月発表されるのですが、毎月彼女はリストの最後、つまり彼女が最も重いということなので心配です。そこで彼女は、社長にルールを変更するよう提案しました。たとえば、新しいルールは次のとおりです:
新しい並べ替えルールは、「重み」に従って並べ替えられます。重みが同じ場合、並べ替えられます。重みの文字列に従って。 (体重の計算ルール: 体重番号の異なる桁の数値の合計)
あるノーマルオーダークラブのメンバーの体重文字列が与えられた場合、新しいルールに従ってそれらをどのように並べ替えますか? テストケース: 入力:「99 189 86 75」 出力: "75 86 189 99"
初心者の解決策:
def order_weight(string): weight_list = string.split(' ') def helper(x): if not x: return x y = int(x) z = 0 while y: z += y % 10 Y = int(y / 10) return (z,x) weight_list.sort.sort(key = helper) return " ".join(weight_list)
マスターの解決策:
def order_weight(_str): return' '.join(sortsd(_str.split(' '),key = lambda x: sum(int(c) for c in x)))
コメント:
エキスパートの解決策も比較的簡単です。私たちのほとんどは、for c in x を使用し、このレベルで終了します。実際、c に対してさらに演算を実行して、それを合計することもできます。この例では推論を引き出すことができます。 sorted の高度な使い方が簡潔かつ効果的に一度にまとめられています。
3. サイコロ投げゲーム
5 つの 6 面サイコロを使用して行われるサイコロ ゲームで、サイコロを振るたびに 5 つの数字の配列 (数字: 1 ~ 6) が表示されます。配列内に各数値が出現する回数を数え、各数値が出現する回数を 3 回と 1 回の組み合わせに分割し、次の規則に従ってカウントします。注: 出現回数が 3 回以上の場合、少なくとも 1 回は 3 回として計算する必要があり、すべてを 1 回として計算できるわけではありません。
3 1 回 == 1000 ポイント 3 回 6 == 600 ポイント
3 5 == 500 ポイント 3 回 4 == 400 ポイント
3 回 3 == 300 ポイント 3 回 2 = = 200 ポイント
1 回 1 => 100 ポイント 1 回 5 => 50 ポイント
1 回 2 => 0 ポイント 1 回 3 => 0 ポイント
1 回 4 => 0 ポイント 1 回 6 => 0 ポイント
たとえば、5 が 5 回出現する場合、5 が 3 回、5 が 1 回、5 が 1 回として計算されます。が 6 回出現した場合は、A 5 が 3 つまたは 5 が 3 つ使用されてスコアが計算されます。他の数字も同様です。
テストケース:
サイコロを振ってスコアを計算します
5 1 3 4 1 50 2 * 100 = 250
1 1 1 3 1 1000 100 = 1100
2 4 4 5 4 400 50 = 450
ルーキーの解決策:
from collections import Counter def score(dice): num_dict = dict(Counter(dice)) res = 0 for i in num_dict: if i == 1: res +=1000 * (int(num_dict[i] / 3)) + 100 * (num_dict[i] % 3) elif i == 5: res +=500 * (int(num_dict[i])) + 50 * (num_dict[i] % 3) else: res += 100 * (i * int(num_dict[i] / 3)) return res
マスターの解決策:
def score(dice): sum = 0 counter = [0,0,0,0,0,0] points = [1000, 200, 300, 400, 500, 600] extra = [100,0,0,0,50,0] for die in dice: counter[die-1] += 1 for (i, count) in enumerate(counter): sum += (points[i] if count >= 3 else 0) + extra[i] * (count%3) return sum
コメント:
マスターの解決策は、設計されたデータ構造が非常に巧妙であるということです。質問の意味に応じて事前にいくつかのコンテナを設計し、カウンタ リストで (1 ~ 6) と出現回数を巧みに関連付けます。 (1-6)の。ポイントと追加リストは、数字が出現する回数 (3 回と 1 回) をスコアと巧みに関連付けているため、誤ってスコアを入力する可能性が減り、コードの再利用が向上します。ソリューション全体は非常に賢いものです。
上記の質問は非常にシンプルで理解しやすいように思えますが、解決策は他の質問ほど簡潔で独創的ではありません。料理コンテストさながら、一見簡単な卵チャーハンは実は腕試し!プログラミング自体にはアルゴリズムとデータ構造の融合が含まれているため、時間があれば優れたコードをさらに学ぶことができ、自分自身の学習と上達に非常に役立ちます。
[おすすめコース: Python コラム ビデオ チュートリアル ]
以上が初心者の練習に最適な 3 つの興味深い Python の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。