数组搜索+python课后小作业

创建一个5*5网格世界,遵守以下规则:对不同行为进行奖励和乘法,选出最优的方案。

题目:

数组搜索+python课后小作业

思路:

编写程序解决问题的步骤:

首先理解问题,将问题拆分,表达出每个部分的意思。

联系各个部分,考虑特殊情况, 编写代码。

不断修改,直到自己觉得np就OK。

代码:

-*- coding: utf-8 -*-
"""
Created on Mon Apr 25 10:43:07 2022
创建5*5的矩阵
    四种可能行为1234,每次行为都会得分减1
    初始位置[2,1]
    到达终点[5,5],得分加10,
    到达得分点[2,4],得分加5,同时跳到[4,4]
    障碍物[3,3],[3,4],[3,5],[4,3]
@author: lx
"""
import random
import numpy as np

'''
#生成5*5数组函数
#用numpy模块,先创建矩阵5行5列
#更改初始值为1,障碍也为1
[[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 1 1 1]
 [0 0 1 0 0]
 [0 0 0 0 0]]
'''
def array():
    arr = np.zeros((5, 5), dtype=np.int32)
    #障碍
    arr[2][2] = 1
    arr[2][3] = 1
    arr[2][4] = 1
    arr[3][2] = 1
    # print(arr)
    return arr
array()
'''
#移动一次函数
#使用random模块生成数字模拟随机移动,移动方向用1,2,3,4代表上下左右。
#向上移动,则不能在第一行(即i!=0),类似向下(i!=4),向左(j!=0),向右(j!=4);否则为撞向边界,将次数加1,表示不计入移动。
#判断没有经过(即下一个点为0),移到这个位置并且将位置改为1用于表示已经走过;否则为1表示已经走过。
#如果移动到下一个位置那么,得分减1;否则没有移动,将次数加1,表示该次不计入移动。
(函数内优先使用参数+返回值,还是全局变量)?
'''
def move(i,j):
    '''
    i,j:表示数组下标,即当前位置
    count:表示移动次数
    score:表示得分
    '''
    global count,score
    action = random.randint(1, 4)#随机移动
    # print('方向:',action)
    if action == 1 and i != 0:#向上
        if arr[i-1][j]==0:
            arr[i-1][j]=1
            i -= 1
            score-=1
        else:
            count+=1
            #print('返回')
    elif action == 2 and i != 4:#向下
        if arr[i+1][j]==0:
            arr[i+1][j]=1
            i += 1
            score-=1
        else:
            count+=1
            #print('返回')
    elif action == 3 and j != 0:#向左
        if arr[i][j-1]==0:
            arr[i][j-1]=1
            j -= 1
            score-=1
        else:
            count+=1
            #print('返回')
    elif action == 4 and j != 4:#向右
        if arr[i][j+1]==0:
            arr[i][j+1]=1
            j += 1
            score-=1
        else:
            count+=1
            #print('返回')
    else:
        count+=1
        #print('边界')
    # print(arr)
    return i,j

'''
#搜索目标函数
#从初始位置[1,0],重复调用移动一次函数,实现多次移动。
#每次移动都要使用数组下标判断,是否为结束位置[4,4],是否为跳跃位置[1,3]
#and表示两真才真;or表示两假才假。双变量控制循环,and和or的选择。(亮点)
    可能依然没有到达终点,但一定不是最优解。
    circle存在,是为了当移动次数count大于5次,依然可以移动搜索终点。
    count存在,是为了防止循环20次,都是撞墙或者返回,依然可以移动5次搜索终点。
    这时存在一个漏洞bug,circle已经为false,count依然为true(即->[1,1]->[0,1]->[0,0])
    需要做特殊判断解决if count==2 and circle0 or circle>0:
        #特殊判断
        if count==2 and circle

结果:

得分:12
[[0 0 0 0 0]
[1 1 1 1 0]
[0 0 1 1 1]
[0 0 1 1 0]
[0 0 0 1 1]]

出现的问题:

UnboundLocalError: local variable ‘score’ referenced before assignment

UnboundLocalError:局部变量xxx在赋值前被引用

解决:用了两次global声明变量,一个函数内用一次。

按道理我在sousuo()函数内声明了全局变量,函数内的函数move()应该能使用变量,但是报错了。还和一般的变量报错(NameError: name ‘score’ is not defined)不一样。

TypeError: ‘numpy.ndarray’ object is not callable

TypeError: ‘numpy.ndarray’对象不可调用

解决:更改函数名或变量名

函数名和函数内的局部变量命名冲突导致。

如果你也学习python的话,相互关注,共同进步!

Original: https://blog.csdn.net/m0_53876797/article/details/124440480
Author: 木北鲜生
Title: 数组搜索+python课后小作业

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/762537/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Pandas+Numpy+Sklearn随机取数

    公众号:尤而小屋作者:Peter编辑:Peter 大家好,我是Peter~ 本文记录的是如何使用Python、pandas、numpy、scikit-learn来实现随机打乱、抽取…

    Python 2023年8月25日
    054
  • 基于Scrapy框架的简单爬虫

    本项目的完整代码放在最后 目录 1.环境的安装 2.在cmd中创建一个scrapy项目 3.cmd中创建spider包下的爬虫主文件 4.对scrapy文件的具体编写 4.1用xp…

    Python 2023年10月2日
    036
  • Django框架 (九)实现聊天系统

    将监听绑定到各自地图上,而不是窗口上 ~/acapp/game/static/js/src/playground/player/zbase.js add_listening_eve…

    Python 2023年8月4日
    037
  • pytest + yaml 框架 -12.支持执行sql 和 断言sql

    当我们在测试环境写好自动化的代码,领导说你把代码部署到联调环境再测一测,这时候去改用例里面的配置是很痛苦的。所以我们在设计自动化用例的时候,就先要想到多环境的配置与切换。 如果需用…

    Python 2023年9月13日
    046
  • 你认识的C# foreach语法糖,真的是全部吗?

    本文的知识点其实由golang知名的for循环陷阱发散而来,对应到我的主力语言C#, 其实牵涉到闭包、foreach。为了便于理解,我重新组织了语言,以倒叙结构行文。 先给大家提炼…

    Python 2023年10月14日
    041
  • python去除列表中重复元素的方法

    列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法。分享给大家供大家参考。具体如下: 比较容易记忆的是用内置的set l1 = [‘b’,…

    Python 2023年10月30日
    070
  • MongoDB – 数据模型的设计模式

    简介 官方文章的地址是 Building with Patterns: A Summary,其中汇总了 12 种设计模式及使用场景。 上述的图表列举了 12 种设计模式及应用场景,…

    Python 2023年10月12日
    035
  • Python游戏开发入门2 壁球小游戏与图像的基本使用

    目录 小球碰壁运动 控制小球的运行的节奏 壁球小游戏(操控型)与键盘的基本使用 小球碰壁运动 import pygame, sys pygame.init() size = wid…

    Python 2023年9月23日
    051
  • 实训项目二:学生信息管理

    文章目录 一、提出任务 二、实现步骤 * (一)创建Django项目 – students (二)准备静态资源 – 1、创建静态目录 2、创建样式文件 3、…

    Python 2023年8月4日
    064
  • ChatGPT初体验~~真香

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    055
  • flask 定时任务 flask-apscheduler

    Flask-APScheduler介绍 Flask-APScheduler是基于APScheduler库开发的Flask拓展库。APScheduler的全称是Advanced Py…

    Python 2023年8月15日
    060
  • 笔记5-Django框架生成项目与创建应用

    使用 Django 生成一个新项目 myweb2 在命令行执行如下命令 django-admin startproject myweb2 创建一个应用,取名为 mybook cd …

    Python 2023年8月6日
    059
  • pytest-基础

    unittest是python自带的标准库pytest是python的第三方库,独立安装pytest相比于unittest更简洁、更灵活、更高效 不需要使用testsuite收集加…

    Python 2023年9月10日
    046
  • scrapy Middleware 和 selenium 结合

    scrapy Middleware 和 selenium 结合 scrapy框架的结构图和顺序图 ; middleware结合selenium 问题描述:某些网页无法正常通过爬虫去…

    Python 2023年10月3日
    059
  • 数据分析之滚动窗口pandas.DataFrame.rolling方法

    本文使用pandas 1.3.5 , python 3, numpy 1.22.0库 文章目录 前言 一 、rolling使用公式 二、python实现 前言 pandas.Dat…

    Python 2023年8月24日
    059
  • 使用C# 探索 ML.NET 中的不同机器学习任务

    ML.NET 是 Microsoft 开源的针对 .NET 应用程序的 跨平台机器学习库,允许您使用 C#、F# 或任何其他 .NET 语言执行机器学习任务。此外,ML.NET 支…

    Python 2023年10月26日
    044
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球