python - 输出与字符串匹配的列表中最接近的值?
问题描述
我正在刮一个国际象棋游戏。我想得到一个建议的举动。
best_move_dataset = Collection of played Moves in the History
move_done = is the move i have played if the app started
Solution-Output (best_move_dataset == move_done): nearest equality
f6
f5
这是我的代码,我真的不知道如何制作这个解决方案。
best_move_dataset = ['d4 Nc6 e4 e5 f4 f6','d4 Nc6 e4 e5 f4 f5','d4 Nc6 e3 e5 f4']
moves_done = 'd4 Nc6 e4 e5 f4'
moves_done_list = moves_done.split(' ')
len_moves_done = len(moves_done_list)
len_best_move = len(best_move_dataset)
for move_zaehler in range(len_moves_done):
print(best_move_dataset[0])
我希望你们能理解如果你们有任何建议我可以如何改变这个更清楚的问题,那么请提醒我。
希望我能得到一些帮助。
此致
托拜厄斯
解决方案
best_move_dataset = ['d4 Nc6 e4 e5 f4 f6','d4 Nc6 e4 e5 f4 f5','d4 Nc6 e3 e5 f4']
moves_done = 'd4 Nc6 e4 e5 f4'
best_sequences = [str_.split() for str_ in best_move_dataset]
moves_sequence = moves_done.split()
count = len(moves_sequence)
suggestions = []
for best_sequence in best_sequences:
if len(best_sequence) > count:
if moves_sequence == best_sequence[:count]:
suggestions.append(best_sequence[count])
for suggestion in suggestions:
print(suggestion)
输出:
f6 f5
说明:
在将移动序列字符串拆分为列表后,我们将完成移动的序列与历史(循环中)中的每个移动序列进行比较。for
如果该序列比完成动作的序列长,并且其缩短的部分与完成动作的序列相同,我们将该序列的下一个动作添加到准备好的建议列表中。
然后在for
循环中我们打印它们。
笔记:
您可以写而不是使用的列表推导:
best_sequences = []
for str_ in best_move_dataset:
best_sequences.append(str_.split())
推荐阅读
- java - Firebase Firestore 异步行为问题
- mysql - MySQL:无法使用外键创建表
- flutter - 如何在加载main()时设置检查连接的布尔值,然后用它来显示哪个屏幕
- reactjs - createBottomTabNavigator 与不同选项卡的动态 tabStyle
- api - Flutter 应用程序继续使用旧的 API 端点而不是新版本
- postgresql - Postgresql SELECT ORDER BY 由 WITH 生成的列
- python - 无法导入名称 shared_memory
- c# - 行数有限的 DataGridView
- php - Laravel、Vue.js 评论系统分页
- c++ - 无法将参数 '2' 的 'int (Scheduler::*)(int, void*)' 转换为 'int (*)(int, void*)' 到 'bool irq_InstallISR(int, int (*)(int, void *), 空白*)'