これは質問と定義関数のセットアップです:
shuffleString(myString, binKey) - myShufString を返します。
myString
を使用して、文字列 をシャッフルする関数を作成しますbinKey
。これがアイデアです。新しい空の文字列 を形成し、が 0 か 1かに応じてmyShufString
の先頭または末尾の文字を連結し、i=0 から必要に応じて循環して構築します。関数は次の形式で、 を返す必要があります。myString
binKey[i]
binKey
shuffleString(myString, binKey)
myShufString
ヒント:から文字のリストを作成しmyString
、リスト メソッド pop を for ループ内でmyString
. myString
このようにして、 の最後からどの文字が既に使用され、 に追加されたかを追跡する必要がなくなりますmyShufString
。手順 5 でこの関数を呼び出して、手順 1 で作成したアルファベットをシャッフルします。
これが例です。と仮定myString = 'abcdefgh'
しbinKey = '101'
ます。
それでmyShufString = 'hagfbedc'
理由:
以下のように構築myShufString
します。
0) の文字のリストを作成しmyString
、それを と呼びますmyList
。
myList = ['a','b','c','d','e','f','g','h'].
1) 空の文字列から始めます。myShufString = ''
2) 以降binKey[0] = '1'
、 の最後から「h」をポップし、myList
に連結しmyShufString
ます。
3) 以降binKey[1] = '0'
、 の先頭から 'a' をポップし、myList
に連結しmyShufString
ます。
4) 以降binKey[2] = '1'
、 の最後から「g」をポップして にmyList
連結しmyShufString
ます。
5) の最後に達したbinKey
ので、最初に戻ります。
6) 以降binKey[0] = '1'
、myList の最後から「f」をポップし、に連結しmyShufString
ます。
7) 以降binKey[1] = '0'
、 の先頭から 'b' をポップして にmyList
連結しmyShufString
ます。
私はこれまでにこれを得ました:
def shuffleString(myString, binKey):
myShufString = ""
myList = list(myString)
for string in range(len(myString)):
if binKey[i] == '0':
myShufString += myList.pop(0)
else:
myShufString += myList.pop(-1)
else の代わりに elif を使用する必要がありますか、それともこれで問題ありませんか? そして、ポップとbinKey
コマンドがどのように機能するのかわからない...残りの方法がわからない...
編集:次のエラーメッセージが表示されました:
トレースバック (最新の呼び出しが最後):
ファイル ""、1 行目、
decryptCS8Cipher("That Sam-I-Am. That Sam-I-Am. I do not like that Sam-I-Am.","decaf")
ファイル「C:\Users\Elizabeth\Dropbox\CMPSC 8\lab05\lab05_function.py」の 54 行目
復号化CS8Cipher
shufAlph = shuffleString(alphabet, binKey)
ファイル「C:\Users\Elizabeth\Dropbox\CMPSC 8\lab05\lab05_function.py」、18 行目、shuffleString
if binKey[i] == '0':
NameError: グローバル名 'i' が定義されていません
string 変数と i 変数をどうすればよいかわかりません。助けてください!ありがとうございました!