Форум сайта python.su
Ребят help..! Только начал изучать Python/ подскажите как можно решить такую задачу..!
1. а
2. aab
3. aabaabc
4. aabaabcaabaabcd
и т.п.
Нужно вычислить какой символ будет находиться в заданной позиции справа налево после того как будут записаны все символы англ алфавита т.е. программа спрашивает число, и выводит в ответ символ. например: если введешь 1 то ответ z
Я сделал так:
def f(n):
return chr(26 - n + ord('a'))
Но вот только как теперь сделать так чтобы формировалась строка
a
aab
aabaabc
и так далее..?
Офлайн
Во-первых, из вашего примера не очень ясно, как именно формируется строка. Насколько я понял, новая строка получается умножением предыдущей строки на 2 и прибавлением к ней нового символа.
Если в лоб:
def foo(): result = 'a' while not result.endswith('z'): result = ''.join([result*2, chr(ord(result[-1])+1)]) return result[::-1]
def gen_position(): ... r = 1 ... for _ in range(26): ... yield r ... r = r*2 + 1
def what_the_char(number): positions = list(gen_position) for position in positions[::-1]: if not number%position: return chr(ord('a')+positions.index(position)) return "I don't get it"
Отредактировано fata1ex (Апрель 4, 2012 10:48:41)
Офлайн
нет ни хрена не так
вот что у меня получилось:
def len(n): if n<1: return 0 if n==1: return 1 return len(n-1)*2+1 def left_pos(step, pos): return len(step) - pos+1 alphabet = 'abcdefghijklmnopqrstuvwxyz' def char_in_position(step=26, right_pos=1): current_len = len(step) if right_pos <= step: return alphabet [:step][-right_pos] lp = left_pos(step, right_pos) new_step = -1
Отредактировано Dryg (Апрель 6, 2012 11:27:51)
Офлайн
Сформировать список, а потом выдергивать из него нужный элемент нельзя по условию задачи?
Офлайн
Вообще то никто и не выдергивает элемент из списка.. Мы просто выводим элемент находясь в нужной позиции справа налево..!
Офлайн
DrygЭто понятно, но если нет условий, например программа не должна нагружать оперативу или критично быстродействие, то задача становится тривиальной.
Вообще то никто и не выдергивает элемент из списка.. Мы просто выводим элемент находясь в нужной позиции справа налево..! =)
from string import ascii_lowercase alpha=ascii_lowercase lst=[alpha[0]] for letter in alpha[:-1]: lst=lst*2 lst.append( alpha[ alpha.index(letter)+1 ]) lst.append('z') lst.reverse() while 1: num=input('Enter number') print lst[num]
Офлайн