Добавление результатов из списка в строку - PullRequest
0 голосов
/ 07 марта 2020

Тяжелый python новичок здесь. Я хочу создать простую функцию для игры с угадыванием PIN-кода, которая получает два списка 4-ди git ([угадать], [ответ]) и возвращает строку из 4 букв, указывающую, насколько я близок к угадыванию правильного [ответ] последовательность (например, Higher, True, Lower, Higher) Однако я получаю новый список для каждой строки:

def checkNumbers(guess,right):
    for n in range(4):
        result = []
        if guess[n] == right[n]:
          result.append("T")        #true
        elif guess[n] < right[n]:
            result.append("H")     #higher
        elif guess[n] > right[n]:
            result.append("L")     #lower
        else:
          result.append("F")     #false
        print (result)
    return

checkNumbers([1,2,3,5],[2,2,1,6])

Результат должен выглядеть следующим образом:

checkNumbers([1,2,3,4], [2, 2, 1 , 6]) #call function with ([guess], [answer])

'HTLH' #returns a string stating how accurate [guess] is to [answer] list

Результат выглядит как это, однако:

checkNumbers([1,2,3,5],[2,2,1,6])

['H']
['T']
['L']
['H']

Большое спасибо заранее за любую помощь, которую я мог получить.

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

вы можете использовать строку вместо списка или "". Join ()

def checkNumbers(guess, right):
    result = ""
    for n in range(4):
        if guess[n] == right[n]:
            result += "T"   # true
        elif guess[n] < right[n]:
            result += "H"   # higher
        elif guess[n] > right[n]:
            result += "L"   # lower
        else:
            result += "F"   # false
    print(result)

, но ... возможно, вы захотите использовать zip function

def checkNumbers(guess, right):
    result = ""
    for g, r in zip(guess, right):
        if g == r:
            result += "T"   # true
        elif g < r:
            result += "H"   # higher
        elif g > r:
            result += "L"   # lower
        else:
            result += "F"   # false
    print(result)

Забавный бонус здесь:

def checkNumbers(guess, right):
    print("".join("THL"[(g > r) + (g != r)] for g, r in zip(guess, right)))

Не понимаю, зачем вам нужна else часть ...

0 голосов
/ 07 марта 2020

Инициируйте список и напечатайте результат за пределами из l oop:

def checkNumbers(guess, right):
    result = []
    for n in range(4):
        # do loopy stuff
    print (result)
    return  # not strictly necessary

Если вы сделаете это внутри, вы создадите новый список на каждой итерации.

...