2016-04-11 31 views
1

文字列txtを受け取り、その文字列のASCII文字のintを返す関数を作成しようとしています。また、2番目の引数nがあります。これは、各文字を変換する必要がある桁数を指定したintです。 nのデフォルト値は3です.nは常に3より大きく、入力文字列は常に空ではありません。文字列をそのascii値の整数に変換する

例出力:

string_to_number('fff') 
102102102 

string_to_number('ABBA', n = 4) 
65006600660065 

私の現在の戦略は、リストに変換することにより、その文字にtxtを分割することです。次に、文字をordの値に変換し、これを新しいリストに追加します。次に、この新しいリストの要素を数値に結合しようとします(たとえば、['102', '102', '102']から['102102102']に移動します)次に、このリストの最初の要素(別名唯一の要素)を整数に変換しようとします。このように:

def string_to_number(txt, n=3): 
    characters = list(txt) 
    ord_values = [] 


for character in characters: 
    ord_values.append(ord(character)) 

    joined_ord_values = ''.join(ord_values) 
    final_number = int(joined_ord_values[0]) 

    return final_number 

問題は、私はType Errorを得ることである私はそれに複数の文字が含まれているものに来るとき、私ができるしかし、成功した単一文字の文字列の整数を返すコードを書くことができます。このタイプのエラーのために、このタイプのエラーがあります。これを修正する方法はありますか?ありがとう、これはかなり長い場合はお詫び申し上げます。

答えて

1

これを試してみてください:

def string_to_number(text, n=3): 
    return int(''.join('{:0>{}}'.format(ord(c), n) for c in text)) 

print(string_to_number('fff')) 
print(string_to_number('ABBA', n=4)) 

出力:OPコメント

def string_to_number(text, n=3): 
    l = [] 
    for c in text: 
     l.append('{:0>{}}'.format(ord(c), n)) 
    return int(''.join(l)) 
に尋ねたとして、リスト内包表記のない、:

102102102 
65006600660065 

編集210

便利なリンク(S):

+0

を書式文字列について知っておく必要があるほとんどすべて、あなたに感謝が含まれています!リストの理解ではなく書く方法がありますか?私自身の理解のために...私は、コードのどの部分が何をしているかを指摘できるようにしたいと思います。 –

+0

@IndifferentPotato編集を見てください。そしてそれがあなたを助けたならば、それをupvoteし、答えの横にある空洞の目盛りをクリックすることで受け入れられたものとしてマークしてください。 :) –

+0

華麗な、ありがとう! –

0

joinメソッドは、文字列なので、ASCIIコードを文字列に変換する必要があります。これでほぼ完了します。

ord_values.append(str(ord(character))) 

ただし、それはあなたの桁数要件を守っています。

関連する問題