понедельник, 3 декабря 2012 г.

Преобразование строк в Python

     Для преобразования числа в строку в  Python используем функцию str(), а для преобразования  строки в число функцию int() (рис.1).

 Рисунок 1 Преобразование данных
    С начало создадим строку '234' (рис 1) к ней добавим цифру 2, но добавления не происходит из-за разности типов данных, преобразовав '234' в цифры 234 теперь можно прибавить 2, по такому же принципу  происходит слияние двух строк (конкатенация).
Зная эти две функции можно решить задачку. Пользователь вводит число например 78,23, если сумма до запятой равна сумме чисел после запятой, программа выводит значение TRUE, а если не равны тогда  FALSE.

Рисунок 2 Решение задачи примитивным способом)
    Для решения задачи создадим переменную с числовым значением (например 23.32), затем переведем данные из цифрового в строковое представление и присвоив новое значение переменной st, далее зная что до точки два символа можно преобразовать первые два символа в числа и сложить использовав функцию  int(), также поступим и с символами после точки, а последним действие проверим являются ли равными две переменные в которых содержатся сумма цифр до точки и после точки. 
    На рисунке 3 показан рабочий программный код(Функция first)  которой нужно передать всего лишь цифровое значение и получить результат.

Рисунок 3 Функция first
Данная функция цифры перевод в строку, затем подсчитывает количество символов в строке с помощью функции len(), затем при помощи цикла for и функции range() сравнивает  каждый символ и если символ не является '.' он переводит символ в цифру и присваивает  значение переменной t, так происходит до тех пор пока в строке цикл не встретит точку,  после точки сумма чисел до точки присваивается новой переменной first=t, а сумма чисел после точки присваивается все той же переменной t но с начало присвоив ей значение 0 для обнуления переменной. Как только цикл дойдет до конца слова sd, сравниваются полученные переменные а результат сравнения выводится на экранах. В следующих статьях будет описано использования цикла for.  

12 комментариев:

Andrey Losev комментирует...

Решаю более сложную задачу:
Имеем строку "32 10 33"

Нужно каждое число в строке уменьшить на единицу. С виду просто. Но я уже третий день решаю эту задачу.

Есть "почти" решение, но цикл вовремя не останавливается, выводит ошибку.Потому что для цикла сложения,нужно выбирать следующий символ. И при выборке выходим за пределы созданного из строки списка.

Вот думаю, как правильно завершить цикл...

Реально трудная задача. Я разные подходы пробовал. И через while, и через for, даже через if (тогда просто цикла нет, и просто выбираем цифры без вычитания).

Marcus Cole комментирует...

@Andrey_Losev я питон второй день знаю, но это вроде работает

src = "34 87"
res = ""
for i in range(len(src)):
char = src[i]
if(char == " "):
continue
asnum = int(char)
asnum -= 1
res += str(asnum)

SendLog(res)

VAha WAre комментирует...

я бы добавил еще строчку
src = "34 87"
res = ""
for i in range(len(src)):
char = src[i]
if(char == " "):
res+=" "
continue
asnum = int(char)
asnum -= 1
res += str(asnum)

SendLog(res)

Анонимный комментирует...

src='34 10 43'
res=''
for word in src.split(" "):
res+=str(int(word)-1)+" "
print(res)

Pavel Bass комментирует...

my_string = '34 10 43'
my_decremented_string = " ".join(map(lambda x: str(x-1), map(int, my_string.split(" "))))

Анонимный комментирует...

Жесть какая-то сверху :)

L1 = "32 10 33"
L2 = " ".join(str(int(x)-1) for x in L1.split())

Kapitan Nikolas комментирует...

Помогите плиз я не могу дописать прогу она принимает числа потом плюсует их а потом делит на 2.Пишет что это str.Я прбовал все ваши способы но у меня не вышло(

Игорь комментирует...

Всего лишь 3-ий час юзаю Питон, поэтому говнокод


string = '32 10 15'
splitted = string.split(' ')
for i in range(0,len(splitted)):
res = int(splitted[i])
result = res - 1
print result

Анонимный комментирует...

m=[32,10,33]
col3=[с-1 for с in m]
print(col3)
так проще

TORY комментирует...

Минутка генетики.
Пользователь вводит строку, генетический код, состоящий из букв А(аденин), G(гуанин), C(цитозин),T(тимин).
Задание: посчитать сколько гуанина, тимина, цитозина, аденина входит в данную строку ген. кода.
Пользователь может вводить строку некрасивой, то есть использовать маленькие и большие буквы.
Удачи! плис хелп

TORY комментирует...

Минутка генетики.
Пользователь вводит строку, генетический код, состоящий из букв А(аденин), G(гуанин), C(цитозин),T(тимин).
Задание: посчитать сколько гуанина, тимина, цитозина, аденина входит в данную строку ген. кода.
Пользователь может вводить строку некрасивой, то есть использовать маленькие и большие буквы.
Удачи! плис хелп

Alex комментирует...

По поводу генетики вот такое решение родилось - не знаю, насколько оно "элегантное", но работает точно :)

dna_code = str(input('Введите последовательность кода ДНК: \n'))
print('Введен ДНК-код: ', dna_code)
dna_code = dna_code.lower()
dna_a = int(0)
dna_g = int(0)
dna_c = int(0)
dna_t = int(0)
for symbol in dna_code:
#print(symbol)
if symbol == 'a':
dna_a = dna_a + 1
elif symbol == 'g':
dna_g = dna_g + 1
elif symbol == 'c':
dna_c = dna_c + 1
elif symbol == 't':
dna_t = dna_t + 1
print('Во введенном коде: \n Аденина: ', dna_a, '\n Гуанина: ', dna_g, '\n Цитозина: ', dna_c, '\n Тимина: ', dna_t)