用Python来玩Wordle
Citing Lv2

最近在 Twitter 上看到很多人在发一种几个绿黄灰色 emoji 组成的推文,感觉像是 Github 的图但是有不太对,一查发现原来是一种叫 wordle 文字解密游戏,而推文就是每日题目的成绩。

wordle_twitter

游戏的规则很简单,就是猜5个字母长度的单词,每天有6次机会,每次猜完都会告诉你猜的结果。

  • 绿色: 这个方块的字母在正确的位置
  • 黄色: 这个方块的字母在单词里但是位置是错误的
  • 灰色: 单词中不包含这个方块的字母

思路很简单

  1. 找到所有的英文单词。
  2. 筛选出所有5个字母长度的单词。
  3. 去除所有包含灰色字母的单词
  4. 去除所有不包含黄色字母的单词。
  5. 去除所有绿色方块对应位置字母不一致的单词。
  6. 从剩余词库列表中验证
  7. 重复 3-6 过程。

效果还是不错的,基本可以在5步之内解出。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from math import ceil
from random import random


#加载单词库
word_list = []
for line in open('engmix.txt','r',encoding='utf-8'):
if len(line) == 6:
word_list.append(line[0:5].lower())


# green=1,yellow=2,gary=3


print("在结果中输入5位数组")
print("输入1代表绿色,输入2代表黄色,输入3代表灰色")
print("Example:12331")

#主循环
while True:
print("----------------------------------------------------")
print("候选单词数量:", len(word_list))
random_num = ceil(random() * len(word_list)) - 1
print("随机数:", random_num)
if len(word_list) == 0:
print("没有单词了!")
exit()
word = word_list[random_num]
print("输入单词:", word)
# word = "jujus"
check = str(input('输入结果: '))
if check == 'r':
continue
white_list = set()

for index, select in enumerate(check):
if select == '1':
print("添加白名单:", word[index])
white_list.add(word[index])




for index, select in enumerate(check):

if select == '3':
gary_word = word[index]
# print("排除字母:",gary_word)
counter = 0
while counter < len(word_list):
if len(word_list) == counter:
# print("break")
break
if (gary_word in word_list[counter]) and (gary_word not in white_list):
# print(white_list)
print("排除单词:",word_list[counter])
word_list.remove(word_list[counter])
else:
counter += 1


elif select == '2':
yellow_word = word[index]
counter = 0
while counter < len(word_list):
if len(word_list) == counter-1:
print("break")
break
if (yellow_word not in word_list[counter]) or (yellow_word == word_list[counter][index]):
print("排除单词:", word_list[counter])
word_list.remove(word_list[counter])
else:
counter += 1


elif select == '1':
green_world = word[index]
counter = 0
while counter < len(word_list):
if word_list[counter][index] != green_world:
print("排除单词:", word_list[counter])
word_list.remove(word_list[counter])
counter -= 1
if len(word_list) == counter-1:
# print("break")
break
counter += 1
 Comments