Python сбрасывает переменные - цикл - PullRequest
0 голосов
/ 08 мая 2018

Я только начал учиться кодировать.

Я пытаюсь написать этот простой счетчик. Он работает при первом запуске, однако, когда цикл вызывает «while ()», он сбрасывает и «r», и списки «we_list» «you_list». Я не могу понять, как сохранить их значение даже после цикла.

def begin():
    r = 1
    print("This is a counter for the game Belote")
    print("Round " + str(r))

    we_list = []

    you_list = []

    we = int(input("Enter score for 'We' "))
    we_list.append(we)
    we_sum = sum(we_list)

    you = int(input("Enter score for 'you' "))
    you_list.append(you)
    you_sum = sum(you_list)

    print("WE " + str(we_sum))
    print("YOU " + str(you_sum))
    r += 1
    while we_sum or you_sum < 151:
        begin()
    else:
        print("End of game ")
        exit()
begin()

Edit:

Я отредактировал код с предложениями, и мне удалось исправить r и списки, однако теперь у меня проблема в том, что он не выходит из цикла после 151.

we_list = []
you_list = []

def begin(r):
    print("This is a counter for the game Belote")
    print("Round " + str(r))

    we = int(input("Enter score for 'We' "))
    we_list.append(we)
    we_sum = sum(we_list)

    you = int(input("Enter score for 'you' "))
    you_list.append(you)
    you_sum = sum(you_list)

    print("WE " + str(we_sum))
    print("YOU " + str(you_sum))
    r += 1
    while we_sum or you_sum < 151:
        begin(r)
    else:
        print("End of game ")
        exit()
r=1
begin(r)

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Исправьте ваш код, отправляющий r в качестве аргумента

def begin(r):
    print("This is a counter for the game Belote")
    print("Round " + str(r))

    we_list = []

    you_list = []

    we = int(input("Enter score for 'We' "))
    we_list.append(we)
    we_sum = sum(we_list)

    you = int(input("Enter score for 'you' "))
    you_list.append(you)
    you_sum = sum(you_list)

    print("WE " + str(we_sum))
    print("YOU " + str(you_sum))
    r += 1
    while we_sum or you_sum < 151:
        begin(r)
    else:
        print("End of game ")
        exit()
r=1
begin(r)
0 голосов
/ 08 мая 2018

Ваш дизайн немного запутан, вы должны выделить "круглую" логику в выделенную функцию и вернуть эти значения.

Также, если вам не нужно отслеживать каждое добавленное значение, вам не нужно вести список, вы можете просто напрямую его суммировать.

def round(we, you):
    we_in = int(input("Enter score for 'We' "))
    we = we + we_in

    you_in = int(input("Enter score for 'you' "))
    you = you + you_in
    print("WE " + str(we))
    print("YOU " + str(you))

    return [we, you]

def begin():
    r = 1
    print("This is a counter for the game Belote")

    we_sum = 0  
    you_sum = 0  

    while we_sum or you_sum < 151:
        print("Round " + str(r))    
        r += 1
        [we_sum, you_sum] = round(we_sum, you_sum)
    else:
        print("End of game ")
        exit
0 голосов
/ 08 мая 2018

r является локальной переменной, поэтому каждый раз, когда begin() вызывает себя, новый begin() получает новый r.

Вы можете создать глобалы r, we_list и you_list (объявить их вне begin() или с ключевым словом global), и они сохранят значения.

0 голосов
/ 08 мая 2018

вы инициализируете r,we_list and you_list внутри функции begin, поэтому при запуске вызывается from, а каждый раз, когда они инициализируются до r=1, you_list=[] and we_list = []. Инициализируйте их вне функции начала.

...