【问题标题】:Why isn't my output returning as expected?为什么我的输出没有按预期返回?
【发布时间】:2021-11-07 08:50:16
【问题描述】:

所以我写了这段代码

def diagsDownRight(M):
    n = len(M)
    m = [[''] * (n - i - 1) + row + [''] * i for i, row in enumerate(M)]
    return ([''.join(col) for col in zip(*m)]), [''.join(col[::-1]) for col in zip(*m)]
def diagsUpRight(M):
    n = len(M)
    m = [['']*i + row + ['']*(n-i-1) for i, row in enumerate(M)]
    return [''.join(col) for col in zip(*m)], [''.join(col[::-1]) for col in zip(*m)]

def rows(M):
    return ["".join(row) for row in M], ["".join(reversed(row)) for row in M]
def cols(M):
    return ["".join(col) for col in zip(*M)], [''.join(col[::-1]) for col in zip(*M)]
def contains_word(grid: list[list[str]], w: str):
    if w in diagsUpRight(grid):
        return w
    if w in diagsDownRight(grid):
        return w
    if w in rows(grid):
        return w
    if w in cols(grid):
        return w

print(contains_word(grid=[
["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","q","b","e","i","e"],
["t","r","s","b","o","g"],
["u","w","x","v","i","t"],
["n","m","r","w","o","t"]]
, w='raw'))

对于此代码,如果在 rows(M)、cols(M)、diagsDownRight(M)、diagsUpRight(grid) 中找到单词 w,我想让 contains_word 返回单词 w,但是当我输入代码时,如图所示上面,输出不显示。我在这里做错了什么?

编辑我尝试这样做,但输出仍然返回 None

def contains_word(grid: list[list[str]], w: str):
    for col in diagsUpRight(grid):
        if w in col:
            return w
    for col in diagsDownRight(grid):
        if w in col:
            return w
    for row in rows(grid):
        if w in row:
            return w
    for col in cols(grid):
        if w in col:
            return w

print(contains_word(grid=[["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","q","b","e","i","e"],
["t","r","s","b","o","g"],
["u","w","x","v","i","t"],
["n","m","r","w","o","t"]]
, w='raw'))

【问题讨论】:

    标签: python list


    【解决方案1】:

    错误:-

    • 在您的代码中,每个 function 返回 tuples 并带有 2 个列表。
    • 您在第二个代码的列表中进行了迭代,但 返回的 字符串是 'rawbit',因此您需要遍历 'rawbit' 以获取 'raw'

    代码:-

    def diagsDownRight(M):
        n = len(M)
        m = [[''] * (n - i - 1) + row + [''] * i for i, row in enumerate(M)]
        return [''.join(col) for col in zip(*m)]+[''.join(col[::-1]) for col in zip(*m)]
    
    def diagsUpRight(M):
        n = len(M)
        m = [['']*i + row + ['']*(n-i-1) for i, row in enumerate(M)]
        return [''.join(col) for col in zip(*m)]+[''.join(col[::-1]) for col in zip(*m)]
    
    def rows(M):
        return ["".join(row) for row in M]+["".join(reversed(row)) for row in M]
    
    def cols(M):
        return ["".join(col) for col in zip(*M)]+ [''.join(col[::-1]) for col in zip(*M)]
    
    def contains_word(grid: list[list[str]], w: str):
        for words in diagsUpRight(grid):
            if w in words:
                return w
        for words in diagsDownRight(grid):
            if w in words:
                return w
        for words in rows(grid):
            if w in words:
                return w
        for words in cols(grid):
            if w in words:
                return w
    
    
    print(contains_word(grid=[["r","a","w","b","i","t"],
    ["x","a","y","z","c","h"],
    ["p","q","b","e","i","e"],
    ["t","r","s","b","o","g"],
    ["u","w","x","v","i","t"],
    ["n","m","r","w","o","t"]]
    , w='raw'))
    

    【讨论】:

    • 嘿,谢谢你的回答。但是,我发现您的代码不适用于 cols(M)、diagsUpRight(M) 和 diagsDownRight(M)。例如,我把 w = 'rabbit' 按照给定的网格放在对角线上。
    • w='rabbit' 时效果很好。它给出了结果。
    • w='rabbit'? 时你会得到什么输出。因为它对我来说非常好
    • 哦非易失性。是的,我删除了“return res”,这就是为什么。顺便说一句,是否可以在不使用 res 的情况下修改您的代码,因为如果我没记错的话,显然它是内置在资源中的。我有点想尽可能保持基本,这样我自己就能理解。
    • 我编辑了它。还好吗?
    【解决方案2】:

    它返回 None 然后你有一个列表列表, 所以你需要在 contains_word 函数中遍历网格, 目前你浏览了一个列表列表,这个列表并没有解决你的 if in 条件

    【讨论】:

    • 抱歉顺便说一句,我不太了解很多与 python 相关的东西,因为我是新手。 wdym 通过迭代网格?
    【解决方案3】:

    您原来的rows(M) 函数返回一个元组(['rawbit', 'xayzch', 'pqbeie', 'trsbog', 'uwxvit', 'nmrwot'], ['tibwar', 'hczyax', 'eiebqp ',' gobsrt ',' tivxwu ',' towrmn '])。为了满足条件if w in rows(grid):w 必须匹配元组的列表之一,例如列表['rawbit', 'xayzch', 'pqbeie', 'trsbog', 'uwxvit ',' nmrwot ']。但是由于您正在寻找字符串raw,因此永远不会满足此条件。

    特别是这样改rows(M)函数,结果是raw

    def rows(M):
        return ' '.join(''.join(l) for l in M) + ' ' + ' '.join(''.join(reversed(l)) for l in M) # rawbit xayzch pqbeie trsbog uwxvit nmrwot tibwar hczyax eiebqp gobsrt tivxwu towrmn
    

    contains_word 返回:

    raw
    

    【讨论】:

    • 我应该添加 return ' '.join(''.join(l) for l in M) + ' ' + ' '.join(''.join(reversed(l)) for l in M) 用于除 contains_words 之外的每个函数,以便如果找到其他单词,则返回该单词??
    • 这种方法适用于其他功能,考虑到它们的具体情况
    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多