我刚刚从CS 50上学习了Python基础知识,现在正在try 制作一个小游戏程序进行练习.中途我遇到了一个潜在的问题.

总结一下这个游戏就像:

  1. 用户输入0-9中的5个数字
  2. 该游戏为5个数字编程了多个固定模式
  3. 将用户输入与模式匹配
  4. 根据它匹配的内容(或不匹配)给出分数

示例:

User will enter - 1,2,3,4,5
Types of possible patterns - a,a+1,a+2,a+3,a+4  1 point
                           - a,a+2,a+4,a+6,a+8  2 points
                           - a,a+1,a+3,a+5,a+7  3 points

因此,在这种情况下,用户获得1分.

我当前的问题是,我正在try 创建很多不同的模式(比如20个),但到目前为止我所知道的唯一方法是对每个模式使用if声明,这样

if .....

if .....

if .....

但如果我要这样做很多次,感觉是错误的.我try 寻找减少多个if的方法,但使用跳转表(字典)等方法似乎在这里不起作用.Thanks in advance

推荐答案

您可以将您的模式和分数放入列表中.例如,将模式存储为可以基于输入a进行判断的拉姆达表达.

然后您可以迭代这些模式、判断它们并将结果与用户输入进行比较.

user_input = [12, 14, 16, 18, 20]
a = user_input[0]

# define your patterns and their scores
patterns = [
    lambda x: [x, x + 1, x + 2, x + 3, x + 4],
    lambda x: [x, x + 2, x + 4, x + 6, x + 8],
    lambda x: [x, x + 3, x + 6, x + 9, x + 12],
]
scores = [1, 2, 3]


def compare_list(list1, list2):
    return list1 == list2


score = 0
for idx, pattern in enumerate(patterns):
    if compare_list(user_input, pattern(a)):
        print("Pattern found")
        score = scores[idx]
        break

print(f"Score: {score}")

您可能需要在判断相等性之前对列表进行排序,具体取决于您想要匹配的模式.

Python相关问答推荐

带有Postgres的Flask-Data在调用少量API后崩溃

Pandas使用过滤器映射多列

Docker-compose:为不同项目创建相同的容器

Polars Dataframe:如何按组删除交替行?

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

使用polars .滤镜进行切片速度比pandas .loc慢

在Python中对分层父/子列表进行排序

从webhook中的短代码(而不是电话号码)接收Twilio消息

Python多处理:当我在一个巨大的pandas数据框架上启动许多进程时,程序就会陷入困境

对Numpy函数进行载体化

'discord.ext. commanders.cog没有属性监听器'

Python上的Instagram API:缺少client_id参数"

按顺序合并2个词典列表

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

迭代嵌套字典的值

导入...从...混乱

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

未知依赖项pin—1阻止conda安装""

跳过嵌套JSON中的级别并转换为Pandas Rame

提高算法效率的策略?