Python - Корректный вывод
Подскажите, где запутался? Прога должна корректно выводить ("n", программист /а /ов)
n = int(input())
0 <= n <= 1000
if n % 10 == 2 or n % 10 == 3 or n % 10 == 4 and n % 10 == 1:
print(n, "программиста")
elif (n % 10) // 10 and n == 2 or n == 3 or n == 4:
print(n, "программиста")
if n % 10 == 1 and n % 100 == 1:
print(n, "программист")
if n % 10 == 5 or n % 10 == 6 or n % 10 == 7 or n % 10 == 8 or n % 10== 9 or n % 10 == 0:
print(n, "программистов")
elif n % 100 == 1 and n % 100 == 2 and n % 100 == 3 and n % 100 == 4:
print(n, "программистов")
Ответы (3 шт):
Вначале отсекаем сотни, так как по правилам русского языка 1 или 101, или 801 - окончания те же: n = n%100
В целом для 1, 21, 31, ...91 - "программист".
Для 2,3,4,22,23,24,...92,93,94 - "программиста".
Для 0,5,6,7,8,9,10,11-19,20,25,26,27,28,29,...99,100 - "программистов".
То есть, кроме 11-19 все зависит от последней цифры, поэтому создаю базовую строку "программист", а дальше проверяю условия, начиная с блока с участием исключительного случая (11-19), объединяя условия по вариации окончания.
(5 <= n%10 <= 9) or (11 <= n <= 19) or n%10 == 0 => "программистов" (окончание "ов")
n%10 == 1 => "программист" (без окончания)
2 <= n%10 <= 4 => "программиста" (окончание "а") - оставшийся вариант, поэтому условие не прописываю - только else
После выхода из блока проверок по уловиям, окончание добавляется к базовой строке конкатенацией.
document.querySelector('input').addEventListener('input', e => {
let n = e.target.value%100;
let add = '';
if((n%10 >= 5 && n%10 <= 9) || (n >= 11 && n <= 19) || n%10 === 0){
add = 'ов';
} else if(n%10 === 1){
add = '';
} else {
add = 'a';
}
document.querySelector('p').textContent = 'программист' + add;
})
<input type="number" min="0" max="1000">
<p></p>
Решил как-то так) Знаю, что не ахти, можно и короче, но я учусь)
n = int(input())
if n % 10 == 0:
print(n,"программистов")
elif n % 10 == 1 and (n // 10) % 10 == 1:
print(n,"программистов")
elif (n // 10) % 10 == 1:
print(n,"программистов")
elif n % 10 == 5 or n % 10 == 6 or n % 10 == 7 or n % 10 == 8 or n % 10 == 9:
print(n,"программистов")
elif n == 5 or n == 6 or n == 7 or n == 8 or n == 9:
print(n,"программистов")
elif n % 10 == 1 and (n // 10) % 10 != 1:
print(n,"программист")
elif (n // 10) % 10 != 1 and n % 10 == 2 or n % 10 == 3 or n % 10 == 4:
print(n,"программиста")
еще эту задачу можно решить без использования if, как-то так:
n = input()
d = {
n[-1] == '1': 'программист',
n[-1] in ['2','3','4']: 'программиста',
int(n[-2:]) in range(11,20): 'программистов',
}.get(True,'программистов')
print(n, d)