Python を勉強していますが、イテレータの使い方がわかりません。
コードを書く必要があります。C では次のようになります。
list_node *cp = list_of_chars;
char dp = '>'; int flag = 0;
while (cp != NULL)
{ if( isdigit(cp->val) )
{ printf("%c",cp->val);
if( cp->val == '0' )
{ cp->prev->next = cp->next; cp->next->prev = cp->prev; }
else cp->val--;
}
else if( (cp->val == '>') || (cp->val == '<') )
{ dp = cp->val; flag = 1; }
if( dp == '>' ) cp = cp->next;
else if( dp == '<' ) cp = cp->prev;
else return ERR;
if( flag && ( (cp->val == '>') || (cp->val == '<') ))
{ cp->prev->prev->next = cp;
cp->prev = cp->prev->prev;
}
}
このコードを Python に翻訳するのを手伝ってくれませんか? 私は書き始めましたが、いくつかのエラーがあり、ドキュメントを理解しているかどうかわかりません。
ip = {'cp' : iter(program), 'dp' : '>'}
flag = 0
while ip['cp'] != []:
if ('0' <= ip['cp']) & (ip['cp'] <= '9'):
print ip['cp']
if ip['cp'] == '0': ip['cp'] = []
else: ip['cp'] -= 1
elif (ip['cp'] == '>') | (ip['cp'] == '<'):
ip['dp'] = ip.['cp']
flag = 1
else: raise NameError('incorrect cp-value')
if ip['dp'] == '>': ip['cp'].next()
elif ip['dp'] == '<': ip['cp'].prev()
else: raise NameError('incorrect dp-value')
if flag & ( (ip['cp'] == '>') | (ip['cp'] == '<') ):
ip['cp'].prev()
ip['cp'] = []
問題は、関数 next() なしでイテレータの値を取得する方法です。
イテレータを高度に使用した python-expert コードの例も見たいです。