如何使'while'循环将循环的条件结果打印成一行(连接)?

011*_*100 1 python while-loop

所以这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

关键是要制作一个基本的编码器,显然这段代码只是建立一个我可以构建的准代码.我的问题是:

我无法将'while'循环打印的结果打印成一行,并且不仅可以打印成一行,而且可以连接成一个更大的整数(或者就此而言的字符串,比如说代码显示字母而不是整数,从这些字母创建一个字符串).虽然,在这段代码中,我希望代码的结果是整数' 1234 '.不:

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

基本上,我的问题是:如何以这样的方式使while循环打印的结果,它们连接整数(或字母)以创建更大的数字(或字符串)?我不想要结果1 2 3 4

成为10,但我希望它成为整数1234.我在网上看过,但找不到对我有用的东西.事实上我根本没找到任何东西.

Gar*_*tty 5

首先,while在这里使用循环不是最佳的,而是使用for循环,循环设计用于遍历迭代器,如数据结构(字符串只是一个字符序列):

for character in x:
    print(test[character])
Run Code Online (Sandbox Code Playgroud)

然后,不是打印字符,而是将它们存储在列表中.

characters = []
for character in x:
    characters.append(str(test[character]))
Run Code Online (Sandbox Code Playgroud)

然后我们可以将它们连接成一个单独的字符串(我们之前创建了数字字符串以使这一步更容易),并int从该字符串中创建一个:

int("".join(characters))
Run Code Online (Sandbox Code Playgroud)

Python支持更简单的方法来执行这种列表构造 - 列表理解:

characters = [str(test[character]) for character in x]
Run Code Online (Sandbox Code Playgroud)

这产生与上面的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))
Run Code Online (Sandbox Code Playgroud)

作为使数字字符串连接的替代方法,然后还原,我们也可以用数学来做:

number = sum((10 ** power) * test[character] 
             for power, character in enumerate(reversed(user_input)))
Run Code Online (Sandbox Code Playgroud)

我们在这里做的是从右边开始,取每个数字,乘以它所在列的10的幂,然后对该批次求和.