Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2016 13:58:18

1m0n2
Зарегистрирован: 2016-05-01
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Учу питона :)

не понял ето как бы функция для одного слова?В примере про расстояние ее надо было бы вызывать 3 раза и так же как и я формировать строку вывода да? а то как я сделал совсем плохо?работает так то
Смотрю на вашу функцию и думаю что не меньше моей проги будет:
тут тоже придется писать цикл For либо 3 раза вызывать функцию(то есть писать 3 раза) цикл универсальнее будет да и в формировании строки вывода он нужен и при желании (я делал) нужен также еще 1 цикл if что бы не было 0 ежиков (0 метров) вобщем так же и будет только функция ето канеш лучче
Вопрос как в функцию как ваша подать слова(то есть метр, метров, метра и остальные)?руками прописывать или список создать?В смысле как лучше будет.

Отредактировано 1m0n2 (Май 14, 2016 14:45:49)

Офлайн

#2 Май 14, 2016 15:48:39

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

Учу питона :)

>>> def select_ending(n, w0, w1, w2):
...     """Выбрать одно из слов по двум младшим цифрам числа."""
...     out = None
...     d1 = n % 10
...     d2 = n % 100 // 10
...     if d2 == 1:
...         out = w0
...     else:
...         if d1 == 1:
...             out = w1
...         elif d1 in (2, 3, 4):
...             out = w2
...         else:
...             out = w0
...     return out
... 
>>> while True:
...     s = input("Введите расстояние в сантиметрах или нажмите Enter для завершения ")
...     if not s:
...         break
...     try:
...         n = int(s)
...     except ValueError:
...         print("Нужно вводить целое число")
...         continue
...     km = n // 100000
...     x = n % 100000
...     m = x // 100
...     sm = x % 100
...     km_text = select_ending(km, 'километров', 'километр', 'километра')
...     m_text = select_ending(m, 'метров', 'метр', 'метра')
...     sm_text = select_ending(sm, 'сантиметров', 'сантиметр', 'сантиметра')
...     print("В расстоянии", km, km_text, m, m_text, sm, sm_text + '.')
... 
Введите расстояние в сантиметрах или нажмите Enter для завершения 1234567
В расстоянии 12 километров 345 метров 67 сантиметров.
Введите расстояние в сантиметрах или нажмите Enter для завершения 12345
В расстоянии 0 километров 123 метра 45 сантиметров.
Введите расстояние в сантиметрах или нажмите Enter для завершения 100000
В расстоянии 1 километр 0 метров 0 сантиметров.
Введите расстояние в сантиметрах или нажмите Enter для завершения 100311
В расстоянии 1 километр 3 метра 11 сантиметров.
Введите расстояние в сантиметрах или нажмите Enter для завершения 100321
В расстоянии 1 километр 3 метра 21 сантиметр.
Введите расстояние в сантиметрах или нажмите Enter для завершения 
>>>



Офлайн

#3 Май 14, 2016 15:58:35

1m0n2
Зарегистрирован: 2016-05-01
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Учу питона :)

По моему вы не поняли меня счас попробую написать в программке.(Нужно время)Читайте комменты в коде

def select_ending(n, w0, w1, w2):
    out = None
    d1 = n % 10
    d2 = n % 100 // 10
    if d2 == 1:
        out = w0
    else:
        if d1 == 1:
            out = w1
        elif d1 in (2, 3, 4):
            out = w2
        else:
            out = w0
    return out
while True:
    length = input("Введите расстояние в сантиметрах или нажмите Enter для завершения ")
    if not length:
        break
    try:
        n = int(length)
    except ValueError:
        print("Нужно вводить целое число")
        continue
    if n == 0:
        print("Пусто")
        continue
    else:
        km = n // 100000
        x = n % 100000
        m = x // 100
        sm = x % 100
        words = [" километр", " метр", " сантиметр"]
        ending = ["ов ", " ", "а "]
        outline = "В расстоянии "
        intermediateline = [km, m, sm]
        size = -1
        for number in intermediateline:        #цикл добавляет универсальности теперь чтобы добавить миллиметры(или что там за километрами -- световой год(у етой единицы другие окончания уффф)? если надо) достаточно добавить элементы в списки words и intermediateline и добавить формулу нахождения миллиметров
            size += 1
            if number == 0:                    #с этим циклом не будет выводится нулевое значение(0 метров к примеру) по моему так симпотичнее
                continue
            else:
                outline += str(intermediateline[size])
                outline += words[size]
                line = select_ending(intermediateline[size], ending[0], ending[1], ending[2])
                outline += line
    print(outline)
И записал функцию только один раз Думал в параметрах функции можно записать список ending одним словом – выдало ощибку пришлось писать поэлементно.Вот тока как бы в цикле For обойтись без строки вывода а то ее код много строк занимает а если просто принтом как у вас оно в столбик выведет ведь?
И еще вопрос.В книжонке написано как выводить результаты программы в текстовый файл и как читать вводимые данные из текстового файла – А можно вывести результаты в таблицу excel (librecalc) и считывать вводные данные из таблиц? и как где про это почитать?

Отредактировано 1m0n2 (Май 14, 2016 16:57:13)

Офлайн

#4 Май 14, 2016 17:19:50

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

Учу питона :)

1m0n2
И записал функцию только один раз
Вот теперь метры замени на кошки, а сантиметры на яблоки. То, что слова километр, метр и сантиметр - однокоренные, - просто совпадение.

Строку вывода должна ещё одна функция создавать, которая и определяет видимость нулевых значений.

1m0n2
А можно вывести результаты в таблицу excel
Научись для начала передавать данные между функциями. Передача данных в Excel сводится к передаче данных в функцию, которая знает, как сохранить их в документ Excel.



Отредактировано py.user.next (Май 14, 2016 17:23:40)

Офлайн

#5 Май 14, 2016 17:29:44

1m0n2
Зарегистрирован: 2016-05-01
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Учу питона :)

Мдя пожалуй настала пора читать учебник дальше и изучать функции

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version