Pythonでランレングス文字列デコードイテレータクラスを実装するプログラム
ランレングスでエンコードされた小文字の文字列sを使用して構築するイテレータクラスを定義するとします。このイテレータには、次の2つの関数があります-
- next()これにより、イテレータ内の次の要素が検索されます
- hasnext()これは、次の要素が存在するかどうかをチェックします
したがって、入力がs ="2b1a"のような場合、sを使用してオブジェクトを作成し、next()、hasnext()、next()、next()、hasnext()を呼び出すと、出力は"b"になります。 、True、 "b"、 "a"、False。
これを解決するには、次の手順に従います-
- コンストラクターを定義します。これには時間がかかります
- 出力:=新しいリスト
- num:=空白の文字列
- sの各iについて、
- iがアルファベットの場合、
- 出力の最後にnumを挿入
- 出力の最後にiを挿入
- num:=空白の文字列
- それ以外の場合、
- num:=num + i
- iがアルファベットの場合、
- 関数next()を定義します。
- hasnext()がtrueの場合、
- count:=output [0]
- 文字:=出力[1]
- count:=count-1
- カウント>0の場合、
- output [0]:=output [0]-1
- それ以外の場合、
- output:=output[インデックス2から終了まで]
- 返信レター
- 関数hasnext()を定義します。
- 出力のサイズが0でない場合、
- Trueを返す
- Falseを返す
例
理解を深めるために、次の実装を見てみましょう-
class RunLengthIterator: def __init__(self, s): self.output = [] num = "" for i in s: if i.isalpha(): self.output.append(int(num)) self.output.append(i) num = "" else: num += i def next(self): if self.hasnext(): count = self.output[0] letter = self.output[1] count -= 1 if count > 0: self.output[0] -= 1 else: self.output = self.output[2:] return letter def hasnext(self): if len(self.output) != 0: return True return False s = "2b1a" obj = RunLengthIterator(s) print(obj.next()) print(obj.hasnext()) print(obj.next()) print(obj.next()) print(obj.hasnext())
入力
"2b1a" obj = RunLengthIterator(s) obj.next() obj.hasnext() obj.next() obj.next() obj.hasnext()
出力
b True b a False
-
Pythonプログラムを実行する方法は?
コードを記述したら、コードを実行して実行し、出力を取得する必要があります。プログラムを実行すると、コードが正しく記述され、目的の出力が生成されるかどうかを確認できます。 Pythonプログラムの実行は非常に簡単な作業です。 IDLEで実行 IDLEでPythonプログラムを実行するには、指定された手順に従います- Pythonコードを記述して保存します。 プログラムを実行するには、[モジュールの実行]に移動します または、F5をクリックするだけです。 コマンドラインで実行 Pythonスクリプトファイルは「.py」拡張子で保存されます。 Pythonスクリプトを保存したら
-
文字列に偶数の長さの単語を出力するPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 文字列を指定すると、文字列内のすべての単語を均等な長さで表示する必要があります。 アプローチ split()関数を使用して入力文字列を分割します。 forを使用して文字列の単語を繰り返し処理します ループ& len()を使用して単語の長さを計算します 機能。 長さが均等であると評価されると、単語が画面に表示されます。 それ以外の場合、画面に単語は表示されません。 次に、以下の実装を見てみましょう- 例 def printWords(s): # split