我正在为学校作业编写一个非常简单的 KENO 模拟游戏。 非常基础的 Python 知识。 我收到一个 TypeError: unhashable type: list
如果相关,这是我的完整代码:(下面的特定部分)
import random
from random import randrange
import sys
import re
def keno_sim():
acceptable_values = list(range(1, 40))
number_no = int(input("How many numbers would you like to input? (MIN: 1 MAX: 40): "))
if number_no in acceptable_values:
print ("Pick your numbers, (between 1-80), seperated by commas ")
answer = input("> ").split(",")
else:
print ("Please choose a number that's 1-40")
random_number = random.sample(range(1, 80), number_no)
print ("Your numbers are:",answer)
print ("The generated numbers are:",random_number)
matches = len(re.findall(answer, random_number))
if matches > 0.5 * random_number:
print ("You win!")
print ("You had",matches,"matches!")
elif matches < 0.5 * random_number:
print ("Close! but wrong number!")
print ("You had",matches,"matches!")
print("This is KENO\n")
print("GENERAL RULES:\nPick how many numbers you’d like to play, ranging from 1 to 40. Same numbers are drawn from the 80 available on the Keno game grid, if you match more than half of them, you win!")
keno_sim()
again = str(input("Do you want to play again (type yes or no): "))
if again == ["yes", "Yes", "yess", "y","ye", "yea"]:
keno_sim()
else:
print ("Thanks for playing ,name, !")
sys.exit(0)
特定部分:
matches = len(re.findall(answer, random_number))
if matches > 0.5 * random_number:
print ("You win!")
print ("You had",matches,"matches!")
elif matches < 0.5 * random_number:
print ("Close! but wrong number!")
print ("You had",matches,"matches!")
如果可能,请给出具体的修复或示例
答案 0 :(得分:0)
re.findall
需要两个 str
,但是您给了它两个 list
,并且列表是不可散列的,因为它们是可变的。而不是
matches = len(re.findall(answer, random_number))
尝试类似的东西
matches = len(set(answer).intersection(random_number))
不相关,但您也可能想做类似的事情
answer = [int(x) for x in input("> ").split(",")]
和
if matches > 0.5 * len(random_number):
...
elif matches < 0.5 * len(random_number):
...
答案 1 :(得分:0)
're.findall()' 与正则表达式相关,它不适用于列表,仅适用于字符串。在您的情况下,您可以使用集合查找匹配项:
将您的列表转换为集合
set1 = set([int(item) for item in answer]
set2 = set(random_number)
找到它们的交点:
intr = set1.intersection(set2)
求交点的长度:
matches = len(intr)