Для цикла внутри цикла while при запросе пользовательского ввода с условиями

#python #loops #for-loop #input #while-loop

#python #циклы #цикл for #ввод #цикл while

Вопрос:

Я пишу игру на Python, и у нее есть следующие функции, которые можно запросить у пользователя.

  1. это может быть до 4 игроков (минимум 1 игрок, максимум 4 игрока)
  2. Он запросит имя игрока. Если имя уже существует, программа предложит «имя уже в списке» и попросит ввести имя снова
  3. если игрок вводит пустую строку при вводе имени игрока, он завершает работу.
  4. он спросит, сколько n случайных цифр игрок хочет воспроизвести (используется randint (start, stop)). допускается только до 3 цифр

Я знаю, что мне нужно, чтобы пользовательский while цикл на неопределенный срок запрашивал пользовательский ввод, пока условие не будет выполнено. Я также должен использовать for цикл, чтобы запрашивать у пользователей имя на основе ввода в точке 1.

Ниже приведена моя попытка, в которой есть ошибки. Следовательно, нужна ваша помощь в обзоре —

 def attempt1():
playerList = []
numPlayers = input("How Many Players? ")
if int(numPlayers) < 5 and int(numPlayers) > 0:
    while True:
        if numPlayers != "":
            for i in range(int(numPlayers)):
                playerName = input("Player name or <Enter> to end ")
                if playerName != "":
                    if playerName not in playerList:
                        playerList.append(playerName)
                    break
                else:
                    print("Player Name Cannot be empty")
                    # numPlayers = input("How Many Players? ")
        else:
            print("There must be at least one player")
            numPlayers = input("How Many Players? ")
else:
    print("Invalid number of players. Please enter 1 - 4")
print(playerList)

def attempt2(numPlayers):
playerList = list()
# numPlayers = 1
i = 0
while i < 4:
    for x in range(0,numPlayers):
        playerName = input("Name ")
        if playerName not in playerList:
            playerList.append(playerName) 
            i  = 1
        else:
            print("Name is already in the list")
print(playerList)
return playerList
  

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

1. какие ошибки вы получаете, можете ли вы опубликовать ошибку

2. лучше напишите функцию, которая запрашивает имя только одного игрока, а затем используйте ее в цикле, который запускает ее для 4 игроков.

3. вы могли бы сделать numPlayers = int(numPlayers) при запуске, и тогда вам не нужно повторять int(numPlayers) так много раз. Код будет более читаемым.

4. @furas Итак, я пишу функцию для запроса имени пользователя 1 раз и использую ее внутри цикла while и цикла for? подойдет ли это для моей точки номер 2?

5. @deadshot для attempt2 моя программа будет запрашивать пользовательский ввод 4 раза, если numPlayers = 4 и если я ввожу неповторяющиеся имена. Но он будет запрашивать более 4 раз, если я введу дублирующее имя. таким образом, мой список воспроизведения (playlist) становится 8, который должен быть минимальным 1 или максимальным 4

Ответ №1:

Это решает мою проблему. Пожалуйста, любезно предложите, есть ли у вас лучшие решения. Я уверен, что мой код здесь неаккуратен, но пока он работает.

 def askPlayerName(numPlayers):
playerList = []
x = numPlayers
while True:
    if x > 0:
        for i in range(x):
            print(x)
            playerName = input("Enter name: ")
            if playerName not in playerList:
                x -= 1
                playerList.append(playerName)
                break
            else:
                print("ELSE")
                x = numPlayers - len(playerList)
                print(x)
                print("name aldy in the list")
    else:
        return playerList
return playerList