所以这是我的代码:
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.我在网上看过,但找不到对我有用的东西.事实上我根本没找到任何东西.
首先,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的幂,然后对该批次求和.
| 归档时间: |
|
| 查看次数: |
4748 次 |
| 最近记录: |