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'循环的结果打印成一行,这样,不仅打印成一行,而且连接成一个更大的整数(或字符串,比如说代码显示字母而不是整数,以从这些字母创建字符串)。虽然,在这段代码中,我希望代码的结果是整数“ 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]))

然后我们可以将它们连接成一个字符串(我们之前制作了数字字符串以使这一步更容易),并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

如果要处理一大堆事情,不要在运行中连接字符串,而是在末尾使用 alist和: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 有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 回答