[解決済み] Do-whileループをエミュレートする方法は?
2022-03-20 12:44:23
質問
Pythonのプログラムでdo-whileループをエミュレートする必要があります。残念ながら、以下のようなわかりやすいコードはうまくいきません。
list_of_ints = [ 1, 2, 3 ]
iterator = list_of_ints.__iter__()
element = None
while True:
if element:
print element
try:
element = iterator.next()
except StopIteration:
break
print "done"
"1,2,3,done"の代わりに、以下のように出力されます。
[stdout:]1
[stdout:]2
[stdout:]3
None['Traceback (most recent call last):
', ' File "test_python.py", line 8, in <module>
s = i.next()
', 'StopIteration
']
反復処理の停止」例外をキャッチしてwhileを解除するには、どうすればよいのでしょうか? ループを適切に使用できますか?
なぜそのようなことが必要なのか、その例を擬似コードで以下に示します。
ステートマシンです。
s = ""
while True :
if state is STATE_CODE :
if "//" in s :
tokens.add( TOKEN_COMMENT, s.split( "//" )[1] )
state = STATE_COMMENT
else :
tokens.add( TOKEN_CODE, s )
if state is STATE_COMMENT :
if "//" in s :
tokens.append( TOKEN_COMMENT, s.split( "//" )[1] )
else
state = STATE_CODE
# Re-evaluate same line
continue
try :
s = i.next()
except StopIteration :
break
解決方法は?
何をしようとしているのかよくわからないのですが。このようなDo-whileループを実装することができます。
while True:
stuff()
if fail_condition:
break
または
stuff()
while not fail_condition:
stuff()
リストにあるものを印刷するのに、do whileループを使おうとしているのは何なのでしょうか?なぜ使わないんだ。
for i in l:
print i
print "done"
更新してください。
では、行のリストはあるのでしょうか?そして、それを繰り返し処理したいですか?どうでしょう。
for s in l:
while True:
stuff()
# use a "break" instead of s = i.next()
あなたの希望に近いものがあるように思えますか?あなたのコードの例では、そうなります。
for s in some_list:
while True:
if state is STATE_CODE:
if "//" in s:
tokens.add( TOKEN_COMMENT, s.split( "//" )[1] )
state = STATE_COMMENT
else :
tokens.add( TOKEN_CODE, s )
if state is STATE_COMMENT:
if "//" in s:
tokens.append( TOKEN_COMMENT, s.split( "//" )[1] )
break # get next s
else:
state = STATE_CODE
# re-evaluate same line
# continues automatically
関連
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
Python Decorator 練習問題
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] Pythonに「do ... until」はあるのか?[重複しています]。