課題は自分で行う必要があり (そうでないと、プログラミングを学ぶ意味がありません)、質問が理解できない場合は、先生に質問して説明を求める必要があります。
とはいえ、シフトは原則として非常に簡単です。手で行うことができます。A という文字がある場合、それを 1 (キー = 1) ずらすと B に変換されます。代入では、2 桁ずらすと、A は C になり、B (元の単語では) は D になります。等々。アルファベットの末尾には少し注意が必要です。1 シフトすると、Z は A になります。2 シフトすると、Y は A になり、Z は B になります。
したがって、あなたの例では、HELLO は JGNNQ になります。
H => J
E => G
L => N
O => Q
(注:読みやすくするために大文字を使用していますが、あなたの割り当ては小文字の作業に関するものであるようです。小文字のみを処理するよう求められていると思います。)
これどうやってやるの?あなたが与えられたリンクをチェックしてください。基本的に ord() は文字を整数に変換し、chr() はそのような整数の 1 つを文字に変換します。これは、コンピューターで文字が数字として表現される方法に基づいています。そのため、特定の文字を ord() に変換すると、キーを追加してシフトし、chr() で文字に戻すことができます。
Y と Z から A と B にラップするには、モジュラス演算子 (%) を使用できますが、少し面倒なので注意してください (文字の順序と 'a' の順序の差を計算する必要があります)。 、% 26 (0 から 25 までの数値が得られます) を適用し、それを ord('a) に追加して正しい ord を取得します)。複雑すぎる場合は、いくつかの IF を使用してください。
ユーザーからの入力を受け取り、出力を出力して正しく動作していることを確認する小さなプログラムから始めることをお勧めします。最終バージョンでは入力と出力は必要ありませんが、シフト コードが正しく機能することをテストするのに役立ちます。
次に、ファイルからの読み取りとファイルへの書き込みに関する部分があります。割り当ては、ユーザーに入力を求めるのではなく、ファイルから読み取ります。あなたの行with open ("word-text.txt","r") as f:
は問題ないように見えます。これにより、データを読み取るために必要なファイルハンドルが得られます。f.read() でデータを読み取り、変数に割り当てることができます。あなたが何を教えられたかはわかりませんが、文字列を単語に分割して、文字列<string>.split()
のリスト(あなたの言葉)を作成します。
次に、単語ごとに、以前に記述したコードを使用して文字列をシフトし、元の単語とシフトされた単語の両方を出力ファイルに書き込むことができます。最も簡単な方法は、出力ファイルを (書き込みモードで) 開くことから始めて、リストをループすることにより、シフトと書き込みの両方を一度に行うことです。