Ваш код всегда будет оцениваться как истинный
if again == "yes" or "YES":
Измените его на:
if again.lower() == "yes":
Или
if again in ("YES", "yes", "y",..)
Когда он истинный, вам нужно чтобы оторвать от вас второй цикл:
if again.lower() == "yes":
replay = replay + 1
break
Когда оно ложно, не прерывайте, а выйдите из программы, используя:
exit()
Поскольку воспроизведение используется только для выхода из вашего кода, вам это не нужно, если вы используете exit ().
Тогда код будет: импортировать случайным образом
while True:
target = random.randint(1, 100)
guess = int(input("Guess the number 1-100: "))
score = 0
while True:
score = score + 1
if guess < target:
print ("The number is higher. Try again.")
guess = int(input("Guess the number 1-100: "))
elif guess > target:
print ("The number is lower. Try again.")
guess = int(input("Guess the number 1-100: "))
elif guess == target:
print ("You guessed Correctly!")
print ("Your score was:", score)
again = str(input("Play again? (yes or no)"))
if again.lower() == "yes":
break
elif again.lower() == "no":
exit()
string s = string.Join(",",Enum.GetNames(typeof(LogicOperands)));
Вы должны сделать что-то вроде этого:
var sbItems = new StringBuilder()
foreach (var item in Enum.GetNames(typeof(LogicOperands)))
{
if(sbItems.Length>0)
sbItems.Append(',');
sbItems.Append(item);
}
Или в Linq:
var list = Enum.GetNames(typeof(LogicOperands)).Aggregate((x,y) => x + "," + y);
string LogicOperandsStr
= Enum.GetNames(typeof(LogicOoperands)).Aggregate((current, next)=>
current + "," + next);
Хотя ответ @ Moose самый лучший, я Рекомендуется кешировать значение, так как вы можете часто его использовать, но вряд ли оно изменится во время выполнения на 100% - если только вы не изменяете и не перекомпилируете перечисление. :)
Примерно так:
public static class LogicOperandsHelper
{
public static readonly string OperandList =
string.Join(",", Enum.GetNames(typeof(LogicOperands)));
}
foreach (string value in Enum.GetNames(typeof(LogicOoperands))
{
str = str + "," + value;
}