我正在尝试将每个字母转换为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
的循环后停止循环。
答案 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