Форум сайта python.su
Приветствую! Изучаю питон, вот решаю попутно задачки разные, дошел до этой:
По данному числу 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)
Офлайн
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
Офлайн
SingularityСпасибо, но 1) перепечатал полностью ваш код, не выводит ничего. Если писать print kv(1) дает syntax error. 2) Число n < 100, а в данном случае, если мы наберем число, выходящее за 1:4, то будет выводиться korov (как в вашем примере -3 korov), что неверно. Или я ничего не понял.
Офлайн
MrJo
Когда надо “korovy” а когда “korovy” ?
“100 korovy” ?
Офлайн
Singularity1 korova - тут верно
MrJoКогда надо “korovy” а когда “korovy” ? “100 korovy” ?
Офлайн
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
Офлайн
Singularityспасибо, буду сейчас изучать что это и с чем едят.
Офлайн
полгода назад делал прогу
/* 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там ещё надо различать 11 и 21def 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'
Отредактировано py.user.next (Апрель 30, 2014 20:48:34)
Офлайн
py.user.nextБлагодарю, сейчас буду разбираться, выглядет устрашающе )
полгода назад делал прогу
Офлайн
MrJo
Синтаксическая ошибка была, если это еще актуально, из-за различия в версиях Python.
В Python 2.* print var, а в Python 3.* правильно print(var, кодировка, разделитель)
Офлайн