Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2016 04:38:35

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

Учу питона :)

Как вы интересно подправили цикл if
А скажите вот вы ввели переменную n и написали n = int(s) а чем плохо так как я писал s = int(s) я почемуто считал что плохо вводить много переменных без которых можно обойтись
Окончания можно замутить много циклов только надо (даже интересно стало такое сделать)

Вот подправил вторую программку

while True:
    x = input("Введите число или нажмите Enter для завершения: ")
    if not x:
        break
    try:
        x = int(x)
    except ValueError as err:
        print("Нужно вводить целое число")
        continue
    l = str(x)
    s = 0
    i = 0
    for y in l:
        z = int(y)
        s = s + z*10**i
        i = i + 1
    print(s)

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

Офлайн

#2 Май 14, 2016 05:25:29

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Учу питона :)

while True:
    number = input('Введите число:> ')
    if number.isdigit():
        print(number[::-1])

бед стиль:
 s = s + z*10**i
 i = i + 1

можно:
s += z*10**i
i += 1

и переменным нужно давать осмысленные имена…

Отредактировано Vigi (Май 14, 2016 05:29:16)

Офлайн

#3 Май 14, 2016 05:35:22

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

Учу питона :)

Vigi

крутооооо мне бы так уметь 4 строчки вместо моих 17

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

Офлайн

#4 Май 14, 2016 05:37:42

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Учу питона :)

Учите мат часть…

Офлайн

#5 Май 14, 2016 05:44:37

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

Учу питона :)

Vigi
Учите мат часть…

учу уже целых 2 программки написал одну поправил и еще надо править
в первом посте я так и сказал что в учебниках практики мало а без практики учение скрипит

Офлайн

#6 Май 14, 2016 05:58:53

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

Учу питона :)

1m0n2
а чем плохо так как я писал s = int(s) я почемуто считал что плохо вводить много переменных без которых можно обойтись
Плохо как раз переопределять имена, которые сначала использовались для одного, а потом используются для другого.

Во-первых, нарушается читаемость кода. Когда ты смотришь вниз и видишь деление s на 100000, то чтобы понять, что такое s, ты смотришь наверх, чтобы узнать, где она создаётся. И там ты видишь s = input(). Получается, что ты делишь строку. Ни внизу, ни наверху не написано, что ты где-то в середине кода поменял эту переменную со строки на число. Теперь представь, что у тебя таких переменных не одна, а десять. Из-за каждой переменной тебе надо будет перечитывать весь код десять раз.

Во-вторых, введённая строка может ещё понадобиться. Когда ты её перевёл в число, то исходную строку ты потерял. В этом коде это без разницы, а в других это может иметь значение, поэтому тебе придётся переделывать код на то, что и должно было быть изначально.

1m0n2
Окончания можно замутить много циклов только надо (даже интересно стало такое сделать)
Это важные детали. Ты должен добиваться от программы того, что нужно тебе, а не полагаться на то, что она сама собой получится. Нужны правильные окончания - сделай правильные окончания.



Офлайн

#7 Май 14, 2016 10:55:00

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

Учу питона :)

Дополнил первую программку теперь правильно выводит окончания а если ввести 0 то программка напишет в ответ : “Пусто” и предложит ввести число снова.Также дал почти всем ссылкам осмысленные имена. Долго я думал над этими окончаниями УФФФФФ аж моск вскипел

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 = [" километр", " метр", " сантиметр", "а ", "ов "]
        outline = "В расстоянии "
        intermediateline = [km, m, sm]
        size = -1
        for number in intermediateline:
            size += 1
            if number == 0:
                continue
            else:
                outline += str(intermediateline[size])
                outline += words[size]
                n1 = number % 100
                if 11 <= n1 <= 20:
                    outline += words[4]
                else:
                    n2 = n1 % 10
                    if 2 <= n2 <= 4:
                        outline += words[3]
                    else:
                        if n2 == 1:
                            outline += " "
                        else:
                            outline += words[4]
    print(outline)
Намудрил канешно возможно у вас получицца сделать проще.

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

Офлайн

#8 Май 14, 2016 13:14:24

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Учу питона :)

Имхо.
Слишком толсто.

Офлайн

#9 Май 14, 2016 13:18:47

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

Учу питона :)

Lestoroer
Имхо. Слишком толсто.

я как смог старалса делать кампактнее.Мож када получче изучу питона будет получатся лучше.Вообще все это дело с окончаниями можно было бы упрятать в функцию и применять не тока в этой проге но и в других но я етого пока ни умею

Офлайн

#10 Май 14, 2016 13:51:54

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
... 
>>> [(i, select_ending(i, 'ёжиков', 'ёжик', 'ёжика')) for i in range(35)]
[(0, 'ёжиков'), (1, 'ёжик'), (2, 'ёжика'), (3, 'ёжика'), (4, 'ёжика'), (5, 'ёжиков'), (6, 'ёжиков'), (7, 'ёжиков'), (8, 'ёжиков'), (9, 'ёжиков'), (10, 'ёжиков'), (11, 'ёжиков'), (12, 'ёжиков'), (13, 'ёжиков'), (14, 'ёжиков'), (15, 'ёжиков'), (16, 'ёжиков'), (17, 'ёжиков'), (18, 'ёжиков'), (19, 'ёжиков'), (20, 'ёжиков'), (21, 'ёжик'), (22, 'ёжика'), (23, 'ёжика'), (24, 'ёжика'), (25, 'ёжиков'), (26, 'ёжиков'), (27, 'ёжиков'), (28, 'ёжиков'), (29, 'ёжиков'), (30, 'ёжиков'), (31, 'ёжик'), (32, 'ёжика'), (33, 'ёжика'), (34, 'ёжика')]
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version