Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 30, 2014 18:54:03

MrJo
Зарегистрирован: 2014-04-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

решение задачи

Приветствую! Изучаю питон, вот решаю попутно задачки разные, дошел до этой:

По данному числу n закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова".

Формат входных данных

Дано число n (n<100).
Формат выходных данных
Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и словом должен стоять ровно один пробел.

Решил ее так :
n = input ('put any numeric ' )
m = str(n)
cow = 'korov'
if int(n) == 1:
print(m + ' ' + cow + 'a')
elif int(n) == 2 or int(n) == 3 or int(n) == 4:
print(m + ' ' + cow + 'y')
elif int(n) < 21 and int(n) >= 5:
print(m + ' ' + cow)
elif int(n) >=21 and m[-1:] == '1':
print(m + ' ' + cow + 'a')
elif int(n) >21 and m[-1:] == '2' or m[-1:] == '3' or m[-1:] == '4':
print(m + ' ' + cow + 'y')
else:
print (m + ' ' + cow)
Но что-то мне подсказывает, что можно сделать более эстетично, чтоли ) Буду очень благодарен, если кто представит свои варианты или укажет, где можно что-то заменить.

Отредактировано MrJo (Апрель 30, 2014 18:56:46)

Офлайн

#2 Апрель 30, 2014 19:30:14

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

решение задачи

def kv(n):
     if n ==1:
         return '1 korova'
     elif n >= 2 and n <= 4:
         return str(n) + ' korovy'
     else :
         return str(n) + ' korov'
print kv(1),  kv(3),    kv(7),   kv(-3) 
>>>1 korova 3 korovy 7 korov -3 korov

Офлайн

#3 Апрель 30, 2014 19:47:20

MrJo
Зарегистрирован: 2014-04-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

решение задачи

Singularity
Спасибо, но 1) перепечатал полностью ваш код, не выводит ничего. Если писать print kv(1) дает syntax error. 2) Число n < 100, а в данном случае, если мы наберем число, выходящее за 1:4, то будет выводиться korov (как в вашем примере -3 korov), что неверно. Или я ничего не понял.

Офлайн

#4 Апрель 30, 2014 19:59:30

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

решение задачи

MrJo
Когда надо “korovy” а когда “korovy” ?
“100 korovy” ?

Офлайн

#5 Апрель 30, 2014 20:05:06

MrJo
Зарегистрирован: 2014-04-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

решение задачи

Singularity
MrJoКогда надо “korovy” а когда “korovy” ? “100 korovy” ?
1 korova - тут верно
2 korovy - тоже верно
7 korov - верно
но по данному коду, если я ничего не путаю, 22 тоже будет korov и 31 korov.
1, 21, 31, 41, 51, 61, 71, 81, 91 korova
2, 3, 4 (а также 22, 23, 24, 32, 33, 34 и т.д) - korovy
все остальное korov. Но ведь по вашему коду у нас не так получается?

Офлайн

#6 Апрель 30, 2014 20:25:01

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

решение задачи

def kv(nn):
     n = abs(int(nn))  %10
     if n ==1:
         return str(nn) + ' korova'
     elif n >= 2 and n <= 4:
         return str(nn) + ' korovy'
     else :
         return str(nn) + ' korov'
print kv(1),  kv(3),    kv(7),   kv(-3) , kv(-31)
>>>1 korova 3 korovy 7 korov -3 korovy -31 korova

Офлайн

#7 Апрель 30, 2014 20:37:20

MrJo
Зарегистрирован: 2014-04-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

решение задачи

Singularity
спасибо, буду сейчас изучать что это и с чем едят.
Только у меня почему то результат не показывает (ни ниндзя, ни родная идле, ни интерактив)
пишу print kv(1) - syntax error. и инпут тоже пробовал. Буду благодарен, если обьясните, что не так делаю. Но в любом случае благодарю.

Офлайн

#8 Апрель 30, 2014 20:46:15

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

решение задачи

полгода назад делал прогу

/* get_noun: по двум младшим цифрам числа
выбирает одно из существительных */
char *get_noun(unsigned num, const char *s0,
const char *s1, const char *s2)
{
const char *s;
int d1, d2;

d1 = num % 10;
d2 = num % 100 / 10;
if (d2 == 1)
s = s0;
else {
if (d1 == 1)
s = s1;
else if (d1 == 2 || d1 == 3 || d1 == 4)
s = s2;
else
s = s0;
}
return (char *) s;
}

Singularity
def kv(nn):
     n = abs(int(nn))  %10
     if n ==1:
         return str(nn) + ' korova'
     elif n >= 2 and n <= 4:
         return str(nn) + ' korovy'
     else :
         return str(nn) + ' korov'
там ещё надо различать 11 и 21



Отредактировано py.user.next (Апрель 30, 2014 20:48:34)

Офлайн

#9 Апрель 30, 2014 20:50:58

MrJo
Зарегистрирован: 2014-04-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

решение задачи

py.user.next
полгода назад делал прогу
Благодарю, сейчас буду разбираться, выглядет устрашающе )

Офлайн

#10 Май 4, 2014 14:08:12

valentjedi
Зарегистрирован: 2014-03-06
Сообщения: 26
Репутация: +  3  -
Профиль   Отправить e-mail  

решение задачи

MrJo
Синтаксическая ошибка была, если это еще актуально, из-за различия в версиях Python.
В Python 2.* print var, а в Python 3.* правильно print(var, кодировка, разделитель)



#!/usr/bin/env python
# -*- coding: utf-8 -*-

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version