2016-10-02 11 views
0

私が取得した数値の値から文字に変換する必要がある部分は、それが機能しないという単語を綴るために、最後の部分に整数を使用する必要があると言いますか?数値をASCII文字に変換しますか?

は、文字列が

print "This program reduces and decodes a coded message and determines if it is a palindrome" 
string=(str(raw_input("The code is:"))) 

変更、それはケースに

string_lowercase=string.lower() 
print "lower case string is:", string_lowercase 

ストリップ特殊文字を下げるために受け入れる

specialcharacters="1234567890~`[email protected]#$%^&*()_-+={[}]|\:;'<,>.?/" 

for char in specialcharacters: 
    string_lowercase=string_lowercase.replace(char,"") 

print "With the specials stripped out the string is:", string_lowercase 

入力オフセットが

offset=(int(raw_input("enter offset:"))) 
ASCIIコードへのテキストの

変換

result=[] 
for i in string_lowercase: 
    code=ord(i) 
    result.append([code-offset]) 

あなたがresult.append([code-offset])を呼び出すときに代わりにintのリストのリストのリストを持っているように見えます

text=''.join(chr(i) for i in result) 
print "The decoded string is:", text.format(chr(result)) 
+2

あなたが「動作しない」とはどういう意味ですか?また、 "strip special characters"部分については、 'import string'を先に使ったと仮定して、string_lowercase = [x for string_lowercase in x in string.ascii_letters]'に行きました。最後に、変数に 'string'という名前を付けないでください。 – Efferalgan

+0

** "パート[...]は機能していません" **。どちらの部分ですか、なぜ私たちに多くの他の部分も見せてくれるのですが、どこに問題があるのか​​混乱させますか?より良いことだけを見せて、間違ったことをする最初の部分について質問してください。 (後の部分は、間違ったデータを取得しているだけなので、何かが間違っている可能性があります。) –

答えて

0

をテキストにASCIIコードから変換。これは後でchr(i) for i in resultを呼び出すときに、chr()にintの代わりにリストを渡すことを意味します。

これをresult.append(code-offset)に変更してください。

その他の小さな提案:

  • raw_inputすでにあなたの文字列を与えるので、明示的にキャストする必要はありません。
  • 特殊文字のあなたの除去がより効率的に以下のように書くことができる

    special_characters = '1234567890~`[email protected]#$%^&*()_-+={[}]|\:;'<,>.?/' 
    string_lowercase = ''.join(c for c in string_lowercase if string not in special_characters) 
    

    これはあなただけspecial_charactersstring_lowercaseを通じて一度の代わりに、文字ごとに反復処理する必要がありますすることができます。

0

それは整数のみを受け入れるときは、chrにリストを渡しています。試してくださいresult.append(code-offset)[code-offset]は1項目のリストです。具体的に

、代わりに:

result=[] 
for i in string_lowercase: 
    code=ord(i) 
    result.append([code-offset]) 

使用:

result=[] 
for i in string_lowercase: 
    code=ord(i) 
    result.append(code-offset) 

あなたはリストの内包を理解していれば、これはあまりにも動作します:result = [ord(i)-offset for i in string_lowercase]

+0

他の何かが動作しない場合は教えてください。 –

0

一覧表示する.append()をしながら、code-offsetの代わりに使用[code-offset]。後で、ASCII値を直接格納するのではなく、その値をリスト(ASCIIの1つ)として格納しています。

したがって、あなたのコードは次のようになります。あなたは、さらにあなたのコードを簡素化することが

result = [ord(ch)-offset for ch in string_lowercase] 

result = [] 
for i in string_lowercase: 
    code = ord(i) 
    result.append(code-offset) 

は、しかし、あなたは、このコードを単純化します。デコードされた文字列を取得するための1行は次のようになります。

decoded_string = ''.join(chr(ord(ch)-offset) for ch in string_lowercase) 

2としてオフセットで:

>>> string_lowercase = 'abcdefghijklmnopqrstuvwxyz' 
>>> offset = 2 
>>> decoded_string = ''.join(chr(ord(ch)-offset) for ch in string_lowercase) 
>>> decoded_string 
'_`abcdefghijklmnopqrstuvwx' 
関連する問題