1

だからここに私のコードがあります:

test = {
    'a':1, 'b':2 , 'c':3 , 'd':4
}

x = raw_input("Type 'abcd' ")
y = len(x)
z = 1
while z < y+1:
    a = x[z-1]
    print test[a]
    z = z + 1

ポイントは、基本的なエンコーダーを作成することです。明らかに、このコードは、私が構築できる準コードを確立するためのものです。私の問題はこれです:

「while」ループの結果を 1 行に出力することはできません。それにより、1 行に出力するだけでなく、より大きな整数 (または文字列) に連結することもできません。これらの文字から文字列を作成するために、整数の代わりに表示される文字をコード化します)。ただし、このコードでは特に、コードの結果を整数 ' 1234 'にしたいと考えています。いいえ:

1
2
3
4

基本的に、私の質問は次のとおりです: while ループの結果を、整数 (または文字) を連結してより大きな数値 (または文字列) を作成する方法で出力するにはどうすればよいですか? 結果は要らない 1 2 3 4

10 になりますが、代わりに整数1234になりたいと思います。オンラインで調べましたが、自分に合ったものが見つかりません。実際、私は何も見つけていません。

4

2 に答える 2

5

まず第一に、whileここでループを使用することは最適ではありません。代わりに、forデータ構造のような反復子をループするように設計されたループを使用してください (文字列は単なる文字のシーケンスです)。

for character in x:
    print(test[character])

次に、文字を印刷する代わりに、それらをリストに保存します。

characters = []
for character in x:
    characters.append(str(test[character]))

次に、それらを 1 つの文字列に結合して (この手順を簡単にするために数字の文字列を作成しました)、intその文字列から を作成します。

int("".join(characters))

Python は、この種のリスト構築を行うためのより簡単な方法、つまりリスト内包表記をサポートしています。

characters = [str(test[character]) for character in x]

これにより、上記の for ループと同じリストが生成されますが、より高速で簡潔になります。

これは、プログラムを次のように書くことができることを意味します。

test = {'a': 1, 'b': 2 , 'c': 3 , 'd': 4}

user_input = raw_input("Type 'abcd':")

number = int("".join(str(test[character]) for character in user_input))

数字の文字列を連結してから元に戻す代わりに、数学でそれを行うこともできます。

number = sum((10 ** power) * test[character] 
             for power, character in enumerate(reversed(user_input)))

ここで行うことは、右から始めて、各数値を取り、それが入っている列の 10 のべき乗で掛けてから、ロットを合計することです。

于 2012-12-31T23:41:58.033 に答える
3

while簡単な答えは次のとおりです。ループ内で出力しないで、文字列を連結して最後に出力します。

result = ''
while z < y+1:
    a = x[z-1]
    result += str(test[a])
    z = z + 1
print result

大量のものが存在する場合は、その場で文字列を連結する代わりに、最後にlistandを使用します。join

result = []
while z < y+1:
    a = x[z-1]
    result.append(str(test[a]))
    z = z + 1
print ''.join(result)

しかし、あなたは整数を取得したいと言っています。印刷以外の理由で、その整数が必要ですか? その場合、文字列を作成してから整数に変換できます。

result = []
while z < y+1:
    a = x[z-1]
    result.append(str(test[a]))
    z = z + 1
val = int(''.join(result))

しかし、これはばかげています。そもそも値を整数として構築しないのはなぜですか?

val = 0
while z < y+1:
    a = x[z-1]
    val = val * 10 + test[a]
    z = z + 1

Python 2 を使用しているように見えるので、改行を追加せずに印刷する唯一の方法は、代わりにスペースを追加しますが、これは役に立ちません。しかし、Python 3 (および Python 2 with from __future__ import print_function) には、より柔軟な代替手段があります。

while z < y+1:
    a = x[z-1]
    print(test[a], end='')
    z = z + 1
print()

writeまたは、次の場所に直接アクセスできますstdout

while z < y+1:
    a = x[z-1]
    sys.stdout.write(str(test[a]))
    z = z + 1
sys.stdout.write('\n')
于 2012-12-31T23:39:10.103 に答える