0
私は期待どおりに動作するチェックサムプログラムをやっています。しかし、print
文だけの行のコメントを外すと結果が変わります。おそらくレイヤー8のエラーですが、これはとても奇妙です。イテレータを印刷すると、イテレータが変更されるのはなぜですか?
#!/usr/bin/env python3
string="foobarbaz" # Only as an example.
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
iteratora = zip(characters[1::2], characters[::2])
iteratorb = zip(characters[2::2], characters[1::2])
# print(list(iterator))
# print(list(iteratora))
# print(list(iteratorb))
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
hex((sum(elements) + characters[0]) % 0x10000)
上記のコードは期待通りに動作し、次の値を返します。今
'0xac66'
、私は最初の印刷行のコメントを解除したいので、コードは次のようになります。
#!/usr/bin/env python3
string="foobarbaz" # Only as an example.
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
iteratora = zip(characters[1::2], characters[::2])
iteratorb = zip(characters[2::2], characters[1::2])
print(list(iterator))
# print(list(iteratora))
# print(list(iteratorb))
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
hex((sum(elements) + characters[0]) % 0x10000)
を
これが返されます:
'0x66'
print
ステートメントのlist
変換で元の値がiterator
に変更されていますか?これは起こらないと思う。
間違いなく、巨大なレイヤー8のエラーです。私は愚かな気持ちになる。私はすべてのSEルールをスキップして、**ありがとうございます!**。今それは明らかです(解決策を知った後)。 – Helio