Проблема с форматированием списков
У меня есть эта функция, которая принимает имя в качестве входных данных, помещает его в список и затем запускает ord() для него. Тем не менее, у меня есть некоторые (во что я верю) проблемы с форматированием. Я пытаюсь заставить его выглядеть так:
b = (ascii value)
a = (ascii value)
t = (ascii value)
m = (ascii value)
a = (ascii value)
n = (ascii value)
У меня имя отображается правильно, однако значение ascii выглядит следующим образом:
b = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
t = [98, 97, 116, 109, 97, 110]
m = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
n = [98, 97, 116, 109, 97, 110]
Не уверен, где я иду не так, ниже приведен код, который я сделал для него:
def x():
name = requestString("name")
usersName = list(name)
ascii = [orc(c) for c in usersName]
for name in name:
print name, "=", ascii
Спасибо!
редактировать: спасибо, это действительно ценится. Получите, где я пошел не так сейчас!
5 ответов
Вот небольшой обзор того, где вы ошиблись:
def x():
name = requestString("name")
usersName = list(name)
ascii = [orc(c) for c in usersName] # here's the list
for name in name:
print name, "=", ascii # and you're printing it here everytime
Вы можете исправить более питонически, как это:
def x():
name = requestString("name")
# usersName = list(name) # no need for this line, you can iterate over the string
ascii = [orc(c) for c in name] #so this is just name
for i, c in enumerate(name): # use c for your character var name,
print c, "=", ascii[i] # and enumerate provides the index
Так как вы ничего не возвращаете, создание списка не требуется, вы также можете предоставить ord(c) на лету:
def print_ords_of_word(name):
for c in name:
print c, '=', ord(c)
ascii
это список ord
для всех персонажей. Чтобы соединить их с символами, которые они представляют, используйте zip
:
for num, char in zip(ascii, name):
print "'{0}'={1}".format(char, num)
Вы можете сделать это за один цикл:
for item in name:
print item, "=", ord(item)
Демо-версия:
>>> def x(name):
... for item in name:
... print item, "=", ord(item)
...
>>> x('batman')
b = 98
a = 97
t = 116
m = 109
a = 97
n = 110
Вы получаете список обратно, потому что вы использовали понимание списка, чтобы преобразовать все usersName в список ордов. Это может быть записано в одну строку с:
print "\n".join("{0} = {1}".format(c, ord(c)) for c in name)
Метод соединения со строкой принимает последовательность или итератор и разделяет каждый элемент исходным содержимым строки (в данном случае \n).
Цикл for внутри вызова join создает генератор, который можно рассматривать как понимание списка, если он помогает лучше понять (но на самом деле это не так).
[ord(c) for c in usersName]
это список всего ord
значения для букв в usersName
, Это не то, что вы хотите поместить рядом с вашим письмом - вы хотите поставить ТОЛЬКО ТО, которое.
Вы можете сделать это:
def x():
name = requestString("name")
ascii = {letter:ord(letter) for letter in name}
for letter in name:
print(letter+" = "+ascii[letter])
# or use string formatting which is better
Или просто:
def x():
name = requestString("name")
for letter in name:
print(letter+" = "+ord(letter))