【问题标题】:Appending results from a list to a string将列表中的结果附加到字符串
【发布时间】:2020-06-20 05:42:57
【问题描述】:

这里是重度 python 初学者。我想为一个 PIN 猜谜游戏创建一个简单的函数,它接收两个 4 位列表( [guess]、[answer] )并返回一个包含 4 个字母的字符串,说明我与猜测正确 [answer] 序列的距离有多近(例如. 更高,真实,更低,更高) 但是,我得到了每个字符串的新列表:

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']

非常感谢我能得到的任何帮助。

【问题讨论】:

    标签: python-3.x list function boolean


    【解决方案1】:

    您可以使用字符串代替列表或"".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函数

    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 部分...

    【讨论】:

      【解决方案2】:

      启动列表并在循环的外部打印结果:

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

      如果您在内部执行此操作,您将在每次迭代时创建一个新列表。

      【讨论】:

      • 感谢您指出这一点,我发现自己偶尔会在我的函数中这样做,哈哈。我想以字符串格式迭代结果,但我认为这是我定义变量result = [] 的方式。我怎样才能让它给我"HYLY"而不是["H"]["T"]["L"]["H"]
      猜你喜欢
      • 2018-09-13
      • 2012-12-05
      • 2012-09-14
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多