0

私はいくつかのpythonコードを持っています.translate_stringメソッドは正しい値を返しますnevmbanが、その後「None」を出力します。

def secret_translate(letter):
    code = ord(letter)-ord('a')
    code = (code+13)%26
    newCode = chr(code+ord('a'))
    return newCode

def translate_string(string):

    newMsg = ''
    i = 0
    while i < (len(string)):

        print(secret_translate(string[i]),end='')
        i= i+1 

print(translate_string("arizona"))

プログラムは次を出力します。

nevmbanNone

私はそれが印刷されることを期待していますnevmban「なし」はどこから来たのですか?

4

4 に答える 4

4

明示的なステートメントがないため、translate_string関数の結果を出力しています。Nonereturn

于 2012-09-27T05:56:30.570 に答える
1

次のように print メソッドを呼び出すと、次のようになります。

print(underground_code(secret[i]),end='')

文字列全体ではなく、関数に 1 文字だけを渡しています。while ループの最初の文字をチェックし続けます。

while i < (len(secret)):

上記whileは一度だけ実行されます。そして、次の関数呼び出しlen(secret)は 1 になります。

*もちろん、これがあなたの望むものなら、私が言ったことは無視してください。

于 2012-09-27T06:00:03.813 に答える
1

変換テーブルがある場合は、実際に変換メカニズムを実装する必要がないことに注意してください。それらが組み込まれていますstring

import string

fromlist="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
tolist = "cdefghijklmnopqrstuvwxyzab"
transtable = string.maketrans(fromlist, tolist)

mycypertext="FCJJM UMPJB"
print string.translate(mycyphertext, transtable) #will print hello world
于 2012-09-27T06:41:06.593 に答える
0

翻訳された単語の文字を出力しますが、代わりに関数から翻訳された単語を返すことをお勧めします。翻訳された単語の後ろに None が印刷されているのは、関数内で単語を印刷し、関数の外で関数の結果を印刷するためです。関数には結果がなく (returnステートメントがありません)、デフォルトは None です。これを印刷すると、関数内で既に印刷されている文字列の末尾に None が追加されます。

translate_string次のような再構築をお勧めします。

def translate_string(string):
  translated_letters = [secret_translate(letter) for letter in string]
  return("".join(translated_letters))

trans_string = translate_string("arizona")
print(trans_string)
'nevmban'

このソリューションでは、リスト内包表記を使用して入力文字列の文字をループします。カウンターを使用した明示的なループは必要ありません。リスト内包表記は非常に優れていますが、慣れる必要があります。さらに、関数は、関数内で出力する代わりに文字列を返すようになりました。None がなくなり、翻訳された文字列をプログラム内でさらに使用できます。たとえば、別の関数への入力として使用できます。

于 2012-09-27T06:37:46.850 に答える