hj170520 发表于 2021-4-4 22:39

[Python] 关于class里set的问题

本帖最后由 hj170520 于 2021-4-11 20:01 编辑

class Hangman:
    def __init__(self, phrase_num=0, guesses_left=7):
      self.phrase_num = phrase_num
      self.guesses_left = guesses_left
      self.letters_left = {*()}
      
    def get_letters_left(self):
      if self.phrase_num == 0:
            gll = {'A', 'G', 'H', 'I', 'M', 'N', 'O', 'P', 'R', 'T', 'Y'}
            self.letters_left = gll
            return gll
      elif self.phrase_num == 1:
            gll = {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'}
            self.letters_left = gll
            return gll

要验证的是
hm = Hangman(0, 7)
assert hm.letters_left == {'A', 'G', 'H', 'I', 'M', 'N', 'O', 'P', 'R', 'T', 'Y'}
hm = Hangman(1, 7)
assert hm.letters_left == {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'}

结果错误,请问一下我明明把 gll = {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'} 这个set数据传给了self.letters_left 为什么还是提示错误
我后来print一下,发现letters_left的顺序不一样,请问传导set数据会改变顺序? 顺序应该不影响结果把。我这个哪里错了呢
请大神们帮忙解答一下{:301_1003:}

细水流长 发表于 2021-4-4 22:44

2205 发表于 2021-4-4 22:49

set不仅去重,好像还是随机排序的。同为菜鸟。共同学习。

luanshils 发表于 2021-4-4 23:08

py 的set方法就是无序的

撧撧嘴 发表于 2021-4-4 23:30

set不就是无序不重复集合么

arccosx 发表于 2021-4-4 23:34

楼主,我在终端用3.7试了一下,比较结果是True,assert没有报错。

Python 3.7.7 (tags/v3.7.7:d7c567b08f, Mar 10 2020, 10:41:24) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class Hangman:
...   def __init__(self, phrase_num=0, guesses_left=7):
...         self.phrase_num = phrase_num
...         self.guesses_left = guesses_left
...         self.letters_left = {*()}
...
...   def get_letters_left(self):
...         if self.phrase_num == 0:
...             gll = {'A', 'G', 'H', 'I', 'M', 'N', 'O', 'P', 'R', 'T', 'Y'}
...             self.letters_left = gll
...             return gll
...         elif self.phrase_num == 1:
...             gll = {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'}
...             self.letters_left = gll
...             return gll
...
>>> hm = Hangman(0, 7)
>>> hm.get_letters_left()
{'G', 'P', 'A', 'I', 'H', 'Y', 'M', 'O', 'R', 'N', 'T'}
>>> hm.letters_left == {'A', 'G', 'H', 'I', 'M', 'N', 'O', 'P', 'R', 'T', 'Y'}
True
>>> assert hm.letters_left == {'A', 'G', 'H', 'I', 'M', 'N', 'O', 'P', 'R', 'T', 'Y'}
>>> hm = Hangman(1, 7)
>>> hm.get_letters_left()
{'U', 'N', 'E', 'H', 'T', 'O', 'S', 'R', 'K', 'C'}
>>> hm.letters_left == {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'}
True
>>> assert hm.letters_left == {'C', 'E', 'H', 'K', 'N', 'O', 'R', 'S', 'T', 'U'}

sapin 发表于 2021-4-5 02:14

https://docs.python.org/3/tutorial/datastructures.html#sets
第一行就说了无序且不能重复,有什么一定要用set不能用tuple的理由吗

asdkiyuas 发表于 2021-4-5 10:05

set会random一下里面的内容,每次结果都不一样

hj170520 发表于 2021-4-5 18:16

sapin 发表于 2021-4-5 02:14
https://docs.python.org/3/tutorial/datastructures.html#sets
第一行就说了无序且不能重复,有什么一定 ...

这是题目,{:301_974:}

hj170520 发表于 2021-4-5 18:52

arccosx 发表于 2021-4-4 23:34
楼主,我在终端用3.7试了一下,比较结果是True,assert没有报错。

Python 3.7.7 ...

我用的是Jupyter notebook 走的,其实我也搞不懂咋会报错呢。
页: [1] 2 3 4
查看完整版本: [Python] 关于class里set的问题