повторно запрашивать ввод пользователя, если ввод неверен, без получения неправильного значения в списке

#python #python-3.x #list #input

#python #python-3.x #Список #ввод

Вопрос:

Почему elif b!= 0 and b!= 1: print (b) не работает? пользователь должен ввести 1 или 0, чтобы определить b . Если пользователь не пишет 1 или 0, я хочу, чтобы программа снова спросила его: «Игрок — это компьютер (0) или человек (1)?» без добавления list_2 начального неправильного числа.

 list_2 = []
players = int(input("number of players: ")) 
   
for i in range (players):
    a = input("name of player: ")
    b = int(input ("is player a Computer (0) or a human (1)?"))

    if b == 0:
        list_2.append([a]   [True])
      
    elif b == 1:
        list_2.append([a]   [False])

    elif b!= 0 and b!= 1:
        print (b)
         
print (list_2)
 

Комментарии:

1. допустим, b = 0, тогда ваше условие принимает значение false, потому что b не равно 1. Если b = 1, то условное значение принимает значение false, поскольку b не равно 0. Я думаю, что ваше условие должно быть elif b!= 0 or b!= 1 .

Ответ №1:

Оберните этот раздел ввода в while True цикл. прервите цикл, когда ввод правильный, в противном случае продолжайте цикл для получения дополнительных входных данных.

 while True:
    b = int(input ("is player a Computer (0) or a human (1)?"))
    if b == 0:
        # player is a computer ...
        # do computer stuff
        break
    elif b == 1:
        # player is a human ...
        # do human stuff
        break
    else:
        print("That was not 1 or 0.  Please try again")
 

Ответ №2:

Поскольку elif не является циклом, компилятор просто проверяет условие, а затем переходит к выполнению инструкции.

Вы можете решить эту проблему, просто добавив *** цикл while *** перед первым условием if, подобным этому :

для i в диапазоне (игроки): a = input(«имя игрока: «) b = int(ввод («игрок — компьютер (0) или человек (1)?»))

 while (b!=0 and b!=1): # Checking if b is not equal to both '0' and '1'
    b = int(input ("is player a Computer (0) or a human (1)?"))
    
if b == 0:
    list_2.append([a]   [True])
  
elif b == 1:
    list_2.append([a]   [False])

elif b!= 0 and b!= 1:
    print (b)
     
 

Ответ №3:

Вы также можете попробовать разделить свой код и создать новую checkInput функцию, как реализовано ниже.

 list_2 = []
players = int(input("number of players: ")) 

def checkInput(value):
    if value == 0:
        list_2.append([a]   [True])
        return True
      
    elif value == 1:
        list_2.append([a]   [False])
        return True
        
    else:
       return False


for i in range (players):
    check = False;
    a = input("name of player: ")

    while check == False:
        b = int(input ("is player a Computer (0) or a human (1)?"))
        check = checkInput(b)
        print('Please enter correct input')
    
         
            
print (list_2)