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


# -*- 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) Заранее спасибо
stanukih
после пересоздания .pyc все пошло как надо
py.user.next
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() #убираем по пробелу у начала и конца
Это ужасный стиль. Никогда так не делай, если без этого можно обойтись. Всегда думай, что у тебя нет конечной строки, а потому и добавить к ней ничего нельзя.

Если задача не учебная, а из реального мира, то при её решении, как правило, ничего удобного нет. Поэтому программу, решающую такую задачу, приходится ломать, чтобы достичь результата. Если не ломаешь, то она начинает тобой управлять, заходя в тупик.
Поэтому сразу старайся решать задачи так, как тебе надо, а не так, как удобно.
bs0d
len(s.split(' ')[-1])
а почему не так?
py.user.next
bs0d
а почему не так?
Так как ему нужно последнее слово, применяется str.rsplit(), которая сразу начинает деление справа.
Так как ему нужно только одно слово, то делается одно деление.
Так как слова разделены пробельными символами, остаётся разделитель по умолчанию.

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

>>> 'a   b'.split()
['a', 'b']
>>> 'a   b'.split(' ')
['a', '', '', 'b']
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB