[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:} set不仅去重,好像还是随机排序的。同为菜鸟。共同学习。 py 的set方法就是无序的 set不就是无序不重复集合么 楼主,我在终端用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'} https://docs.python.org/3/tutorial/datastructures.html#sets
第一行就说了无序且不能重复,有什么一定要用set不能用tuple的理由吗 set会random一下里面的内容,每次结果都不一样 sapin 发表于 2021-4-5 02:14
https://docs.python.org/3/tutorial/datastructures.html#sets
第一行就说了无序且不能重复,有什么一定 ...
这是题目,{:301_974:} arccosx 发表于 2021-4-4 23:34
楼主,我在终端用3.7试了一下,比较结果是True,assert没有报错。
Python 3.7.7 ...
我用的是Jupyter notebook 走的,其实我也搞不懂咋会报错呢。