вывод кода на python выполняется один раз, но вводится в функцию, и вывод дублируется

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть этот код, который работает нормально, и вывод правильный.

 game_type = input("ongoing competition or single play?  ")

if game_type == 'single play':
    users = (input("how many players? "))
    while not users.isdigit():
        users = (input("how many players? "))
    users = int(users)

    players = {}

    for person in range(users):
        name = input("player's name?  ")
        players[name] = []

----output----
ongoing competition or single play?  single play
how many players? 2
player's name?  bob
player's name?  red
  

Но когда я пытаюсь поместить код в функции, он дважды спрашивает меня «сколько игроков» на выходе. Я не уверен, почему он это делает.

 def people():
    users = (input("how many players? "))
    while not users.isdigit():
        users = (input("how many players? "))
    return int(users)

users = people()
players = {}

def player_name():
    for person in range(users):
        name = input("player's name?  ")
        players[name] = []
---------------------------------------------------------
game_type = input("ongoing competition or single play?  ")

from func import *

if game_type == 'single play':
    people()
    player_name()

----output----
ongoing competition or single play?  single play
how many players? 2
how many players? 2
player's name?  red
player's name?  bob
  

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

1. Вам нужно удалить users = people() , потому что вы дважды вызываете people(), поэтому он запрашивает вас дважды. Вы вызываете его выше, а затем снова, спрашивая, является ли это однопользовательской игрой.

2. @FivePlyPaper я удалил users = people() , и теперь я получаю сообщение об ошибке, в котором говорится, что «пользователи» не определены

Ответ №1:

Вы вызываете people() дважды. Вы присваиваете возвращаемое значение в глобальной области переменной «users», а затем вызываете его в операторе if. Если вам нужны одни и те же переменные в разных областях, вы можете создать класс и выполнить некоторую настройку в своем конструкторе.

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

1. значит, если функция присваивается переменной, то это будет исполняемый код, а не статический? Как бы я переписал это так, чтобы player_name() оно принимало число из people()

2. @belmer01 Я отредактировал свой ответ, чтобы уточнить. Но чтобы ответить на ваш вопрос, если у вас есть функция с именем foo, вы можете сказать bar = foo, а затем вызвать bar() . Но все же проблема заключается в том, что ваша функция выполняется дважды.