PleaseConformOnePass - 调整打印命令以及如何阻止程序在空列表上崩溃

问题描述 投票:0回答:1

我目前正在阅读 Srini Devadas 的《Programming for the Puzzled》一书的第 1 章,他在其中讨论了 PleaseConform 和 PleaseConformOnePass 程序。

他在本章末尾设置了一些练习,他希望对现有代码进行某些调整。我特别坚持第二个练习,它指出了以下内容:

修改pleaseConformOnePass以打印更自然的命令并确保它不会在空列表上崩溃

提示,您需要记住内部的开头(而不是在第 6 行打印)

他所说的自然命令是这样的:

“位置 2 到 4 的人翻转你的帽子!” “位置 6 到 8 的人翻转你的帽子!” “11号位的人翻转你的帽子!

他在第一章中演示的代码是:

 def pleaseConformOnePass(caps):
    caps = caps + [caps[0]]
    for i in range(1, len(caps)):
        if caps[i] != caps[i - 1]:
            if caps[i] != caps[0]:
                print(f"People in positions {i}", end="")
            else:
                print(f" through {i-1}, please flip your caps!")

我相信当“caps”为空列表(caps[0]没有值/元素,因此程序抛出错误)时,第2行导致程序崩溃,但删除 caps[0] 会产生正确的结果.

打印语句我完全陷入困境,不知道如何调整它们。

python list for-loop if-statement
1个回答
0
投票

我用 if 语句实现了空列表管理,我这样做是为了记住内部变量“start_interval”的开始。

为了改进我使用的自然语言,该句子有两个版本:

位置1的人,请翻转你的帽子!位置5到6的人,请翻转你的帽子!

代码下方:

def pleaseConformOnePass(caps): if caps: start_interval = None caps += [caps[0]] for i in range(1, len(caps)): if caps[i] != caps[0]: if start_interval is None: start_interval = i if start_interval not in [None, i] and caps[i] != caps[i-1]: if i-1 == start_interval: print(f"Person at position {start_interval}, please flip your cap!") else: print(f"People in positions {start_interval} through {i-1}, please flip your caps!") start_interval = None # Example usage: caps_list = [1, 0, 1, 1, 1, 0, 0, 1, 0, 0] pleaseConformOnePass(caps_list)
我希望我正确理解了这个请求。

© www.soinside.com 2019 - 2024. All rights reserved.