Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 22, 2014 13:50:05

stanukih
Зарегистрирован: 2014-09-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Выводит число ровно в 2 раза больше

Здравствуйте. Я новичок, начал изучать питон. Очень понравился. Программы которые дали чтоб написать на с++ пишу напитоне (разрешили) для обучения. Вот программа:


# -*- coding: utf-8 -*- #кодировка
print ‘введите строку’
l=raw_input()
t=len(l)
l=l.center(t+2) #добовляем по пробелу в начало и вконец
a=-1
z=0
while l!=' 'or z==0:
a=a-1
if l!=' ‘:
z=z+1
z=z/2
print ’длина последнего слова', z
l=l.strip() #убираем по пробелу у начала и конца

суть ее в том что она считает количество букв последнего слова. Вопрос - без строки z=z/2 он выдает ответ в 2 раза больше? Вроде как мне кажется алгоритм правильный… Может ли проблема быть в интерпритаторе (использую линукс с Geany) Заранее спасибо

Офлайн

#2 Сен. 22, 2014 14:09:48

stanukih
Зарегистрирован: 2014-09-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Выводит число ровно в 2 раза больше

после пересоздания .pyc все пошло как надо

Офлайн

#3 Сен. 23, 2014 00:13:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10012
Репутация: +  857  -
Профиль   Отправить e-mail  

Выводит число ровно в 2 раза больше

stanukih
суть ее в том что она считает количество букв последнего слова
Если чисто по-питонячьи:
>>> s = 'abc def ghij'
>>> 
>>> len(s.rsplit(None, 1)[-1])
4
>>>

stanukih
Программы которые дали чтоб написать на с++
Тут нужен способ, более общий для всех языков.
Что надо помнить, так это то, что как строки, так и слова бывают “бесконечными”. Поэтому нужно сделать такой алгоритм, который в любой точке строки выдаст правильный ответ.

stanukih
t=len(l)
А где гарантия, что len() дойдёт до конца строки? Вдруг строка “бесконечная” ?

stanukih
print 'введите строку'
l=raw_input()
Далеко не факт, что строка будет вводиться с экрана. Строка может прийти и по сети. Однако алгоритм должен быть применим как в том, так и в другом случае.

stanukih
l=l.center(t+2) #добовляем по пробелу в начало и вконец
l=l.strip() #убираем по пробелу у начала и конца
Это ужасный стиль. Никогда так не делай, если без этого можно обойтись. Всегда думай, что у тебя нет конечной строки, а потому и добавить к ней ничего нельзя.

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



Отредактировано py.user.next (Сен. 23, 2014 00:17:21)

Офлайн

#4 Сен. 23, 2014 00:20:18

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Выводит число ровно в 2 раза больше

len(s.split(' ')[-1])
а почему не так?

Офлайн

#5 Сен. 23, 2014 09:29:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10012
Репутация: +  857  -
Профиль   Отправить e-mail  

Выводит число ровно в 2 раза больше

bs0d
а почему не так?
Так как ему нужно последнее слово, применяется str.rsplit(), которая сразу начинает деление справа.
Так как ему нужно только одно слово, то делается одно деление.
Так как слова разделены пробельными символами, остаётся разделитель по умолчанию.

s.split()
s.split(' ')
Эти записи различаются по способу обработки: первая читает группами символов, вторая - отдельными символами.

>>> 'a   b'.split()
['a', 'b']
>>> 'a   b'.split(' ')
['a', '', '', 'b']
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version