C# код: Почему так, а не так?
Почитайте про закон Де Моргана. 
Вам нужно, чтоб odd_or_even была равна либо "odd", либо "even"
То есть:odd_or_even == "odd" || odd_or_even == "even"
Но ошибку нужно писать только, если это не выполняется:!(odd_or_even == "odd" || odd_or_even == "even")
Но это эквивалентно вот такому:odd_or_even != "odd" && odd_or_even != "even"
Если подумать, то условие odd_or_even != "odd" || odd_or_even != "even"
не выполнить невозможно, так как оно требует, чтобы odd_or_even одновременно не равнялось двум разным словам, что всегда выполняется
Вы чего то не поняли.
Перевожу цикл на русский:
"спрашивать у пользователя до тех пор пока введенное не равно А или не равно Б". А введенное не может быть равно А и Б одновременно. Вы же пишете не условие ВЫХОДА из цикла, а условие ПРЕБЫВАНИЯ в нем. А || - или - вернет true если хотя бы один элемент true. И они оба не могут быть false ну физически никак.