如何在没有休息声明的情况下完成此程序?

时间:2016-11-15 00:14:34

标签: python list python-3.x break

看到从这个网站制作一个cnect-4游戏的想法,所以我决定自己尝试使用这里的一些代码和我自己拼凑的一些东西,并且不能让这个简单的概念在没有休息的情况下工作在计数之后并提示用户输入x或o,具体取决于哪个玩家正在进行。 我不想使用break,因为这是我以后想要对项目做的事情。 代码应该提示用户他们想要放置他们的作品的列。如果我使用break语句但是我不想使用它们并且稍后当我扩展它时会使游戏更难编码,这一切都有效。 如何在没有break语句的情况下使这个程序按现在的方式工作?我已经尝试删除break语句但是在单次输入后使列完整。

def play_spot(column, box, count):
    column = column - 1

    for row in reversed(range(len(box))):
        if box[row][column] == '-' and count % 2 == 0:
            box[row][column] = 'x'
            count += 1
            break

        if box[row][column] == '-' and count % 2 != 0:
            box[row][column] = 'o'
            count += 1
            break

    return box, count


def print_box(box):
    for row in box:
        print(''.join(row), end="\n")
    print()


def main():
    num_rows = int(input("Enter number of rows (5 minimum) :: "))
    num_cols = int(input("enter number of columns (5 minimum) :: "))
    box = [['-'] * num_cols for _ in range(num_rows)]
    print_box(box)
    is_winner = False
    count = 0
    while not is_winner:
        spot = int(input("Enter what column to place piece in :: "))
        box, count = play_spot(spot, box, count)
        print_box(box)

main()

我假设某些人的名字上的复选标记意味着他们得到了正确的答案?所以,如果你帮忙,我想我会给你那个复选标记? :) 注意:目前的代码可以正常工作,但由于休息时间我无法按照我想要的方式使用它。如果你想看看我想要的样子,只需调试代码即可。

2 个答案:

答案 0 :(得分:1)

您可以将return语句的副本放在每个break的位置,从技术上解决您的问题,但不会真正改变程序流程。

答案 1 :(得分:0)

另一种“循环”可能是:

def play_spot(column, box, count):
    column = column - 1

    for row in reversed(row for row in box if row[column] == "-")
        row[column] = 'x' if count % 2 == 0 else 'o'
        return box, count + 1
    else:
        return box, count

它不是一个循环,你是第一个候选人并使用它,所以你可以改为:

def play_spot(column, box, count):
    column = column - 1

    try:
        row = next(reversed(row for row in box if row[column] == "-"))
        row[column] = 'x' if count % 2 == 0 else 'o'
        return box, count + 1
    except StopIteration:
        return box, count

如果没有可玩的地方,你有没有考虑过你想做什么? (您只需直接返回boxcount