Python:有没有更简单的方法来编写这个脚本?

3

我试图使self.id显示准确的值。我已经实现了,但我想知道怎样才能进一步改进?

self.id = 36

def OnClickNextPage(self):
    if self.id == 36:
        self.id = 37
    elif self.id == 37:
        self.id = 1020
    elif self.id == 1020:
        self.id = 2020
    elif self.id == 2020:
        self.id = 3019
    elif self.id == 3019:
        self.id = 5015
    elif self.id == 5015:
        self.id = 7019
    else:
        return

def OnClickPrevPage(self):
    if self.id == 36:
        return
    elif self.id == 37:
        self.id = 36
    elif self.id == 1020:
        self.id = 37
    elif self.id == 2020:
        self.id = 1020
    elif self.id == 3019:
        self.id = 2020
    elif self.id == 5015:
        self.id = 3019
    elif self.id == 7019:
        self.id = 5015
    else:
        return

我希望能够得到精确的值,但我不太确定如何让它更智能化。


id 的目的是什么? - Michael Bianconi
我猜你可以将Next和Prev映射存储在dict对象中,但这样看起来并不会更清晰。 - Cory Kramer
@MichaelBianconi 我用它来执行其他功能,需要下一个值或上一个值。 - Frezy Frezy
@CoryKramer 嗯,那是唯一的方法吗? - Frezy Frezy
3个回答

2
如果你只是想缩短它,可以使用列表来存储self.id的值和要更改为的值。对于第一个函数:使用以下代码:
def OnClickNextPage(self):
    possible_ids = [36, 37, 1020, 2020, 3019, 5015]
    change_id = [37, 1020, 2020, 3019, 5015, 7019]
    if self.id in possible_ids:
        self.id = change_id[possible_ids.index(self.id)]
        return self
    else:
        return self

确保返回self,以便更新对象的self.id。最初的回答。

2
你可以将ID作为列表,并跟踪所在的页面(索引)。将id设置为属性,以便根据需要轻松计算当前索引的值:“最初的回答”
class Pages:
    def __init__(self, ids):
        self.ids = ids
        self.index = 0

    @property
    def id(self):
        return self.ids[self.index]

    def OnClickNextPage(self):
        self.index += 1

    def OnClickPrevPage(self):
        self.index -= 1

pages = Pages([36, 37, 1020, 2020, 3019, 5015])
print(pages.id)
pages.OnClickNextPage()
print(pages.id)
pages.OnClickNextPage()
print(pages.id)
pages.OnClickPrevPage()
print(pages.id)

最初的回答
这会输出:
36
37
1020
37

1
你可以制作一个有序列表,并跳到列表中的第n+1或n-1个元素。唯一的复杂之处在于知道你当前所在的位置。如果可能,你可以简单地存储n和id。如果这不可能,你可以使用索引方法找到n。
list_of_pages.index(id)

这不是很快,但维护的代码较少。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接