在Python 3.2中使用嵌套循环添加2个ascii转换字符

时间:2014-12-13 22:17:58

标签: python string unicode character ascii

我正在尝试将每个字母转换为ASCII的字符串加在一起,然后相应地相加。例如,将字符串"goodbye" "hello"加在一起我想将每个字母转换为ascii,然后将它们添加到一起,如下所示:

103 + 104 (g + h) 
111 + 101 (o + e)
111 + 108 (o + l)
100 + 108 (d + l)
98 + 111  (b + o)
121 + 104 (y + h)
101 + 101 (e + e) 

在这种情况下,"goodbye"必须是可互换的,即用户输入。这是我到目前为止生成的代码:

input1 = input("Enter word: ")
input2 = "goodbye"
l = len(upnumber)
count = 0

for i in (input1):
     x = (ord(i))
     while count <= l:
         for j in (input2):
              y = (ord(j))
              total = (x + y)
              count = count + 1
              print (total)

此代码不起作用。它似乎只为input1中的每个字符添加input2的第一个字符,无数次。

计数在那里,因为我希望在input1中的每个字符添加到input2的循环后停止循环。

1 个答案:

答案 0 :(得分:0)

您正在为input2 中的每个字符循环遍历所有input1 ,因为您嵌套了循环。

使用zip() function来配对字母:

input1 = input("Enter word: ")
input2 = "goodbye"
# make input1 at least as long as input2
while len(input1) <= len(input2):
    input1 += input1
for x, y in zip(input1, input2):
    total = ord(x) + ord(y)
    print(total)

一旦两个字符串中的最短字符串完成,zip()将停止迭代。由于input1已延长至重复,直至至少与input2一样长,这意味着您最终会处理input2的所有字符,而不会更新,除非input1开始的时间更长。

您可以使用itertools.cycle()无限期地循环浏览input2中的所有字符,而不是手动重复input1

from itertools import cycle

input1 = input("Enter word: ")
input2 = "goodbye"
for x, y in zip(cycle(input1), input2):
    total = ord(x) + ord(y)
    print(total)

演示后一种方法,用一些额外的格式来说明发生了什么:

>>> from itertools import cycle
>>> input1 = 'hello'
>>> input2 = "goodbye"
>>> for x, y in zip(cycle(input1), input2):
...     total = ord(x) + ord(y)
...     print('{!r} + {!r} = {:3d} + {:3d} = {:3d}'.format(x, y, ord(x), ord(y), total))
... 
'h' + 'g' = 104 + 103 = 207
'e' + 'o' = 101 + 111 = 212
'l' + 'o' = 108 + 111 = 219
'l' + 'd' = 108 + 100 = 208
'o' + 'b' = 111 +  98 = 209
'h' + 'y' = 104 + 121 = 225
'e' + 'e' = 101 + 101 = 202