蓝桥杯历期模拟赛真题(精选)十四届蓝桥杯

  1. 1.天气预报查询

function getweather() {
    //TODO:请补充代码
    //  定义一个空数组 追加渲染的数据
    var rows = []
    $.ajax({
        url: 'js/weather.json',
        type: "get",
        success: function (data) {
            // console.log(data.result);
            datalist = data.result
            // console.log(datalist);
            // datalist.forEach(item => {
            //     console.log(item);
            //     rows.push(`<div class="item" id="Monday">
            //     <img src="${item.weather_icon}">
            //     <div class="item-mess">
            //         <div>${item.weather}</div>
            //         <div>${item.temperature}</div>
            //         <div>${item.winp}</div>
            //         <div>
            //             <span>${item.days}</span>
            //             <span>${item.week}</span>
            //         </div>
            //     </div>
            // </div>`)

            for (var item of datalist) {
                console.log(item);
                rows.push(`<div class="item" id="Monday">
                 <img src="${item.weather_icon}">
                    <div class="item-mess">
                        <div>${item.weather}</div>
                        <div>${item.temperature}</div>
                       <div>${item.winp}</div>
                       <div>
                            <span>${item.days}</span>
                            <span>${item.week}</span>
                        </div>
                    </div>
                 </div>`)
            }
            // 因为题目要求不能动dom结构,所以要把原来的结构全部清空,再追加rows里面的内容

            $('.week-weather').empty().append(rows.join(''))
            // });
        }
    })
}

getweather();

解题思路:这题主要就是先用ajax请求到数据,然后定义一个空数组,去存放渲染出来的数据,这里可以用for each或者for of循环都可通过,切记一个细节,因为题目要求不能动html里面的dom结构,把数据给week-weather的时候一定先清空原始写死的数据再追加进去。

2.知乎首页数据动态化

<template>
  <div class="list">
    <div
      class="list-item" v-for="(item,index) in datalist" :key="index"
    >
      <img
        class='list-pic'
   :src='item.imgUrl'
      />
      <div class="list-info">
        <p class='title'>{{item.title}}</p>
        <p class='desc'>{{item.desc}}</p>
      </div>
    </div>
  </div>
</template>
<script>
import axios from 'axios'
export default {
  data() {
    return {
      // 定义一个空数组,存放请求到数据
      datalist:[]
    };
  },
  created(){
    axios.get('./static/data/list.json').then(res=>{
      this.datalist=res.data.data.listInfo
      console.log(this.datalist);
    })
  },
</script>

解题思路:在created里面请求到数据,然后定义一个空数组存放请求的数据,用v-for遍历数组, 再把写死的地方改成动态的的就可以了,就算简单的vue渲染数据。

3.实现卡号绑定功能

function bind(cardno, password) {
    //Todo:补充代码
 $.ajax({
    url:'js/cardnolist.json',
    type:"get",
    success:function(data){
        // 把请求到数据给一个变量
        let datalist = data.cardnolist
        // console.log(datalist[0].cardno);
        // for循环遍历这个数组,用for in或者普通的for循环都可
      for (const i in datalist) {
        if(cardno==datalist[i].cardno&&password==datalist[i].password){
                    $('#tip2').addClass('fade')
                    $('#tip1').removeClass('fade')
                    break;
                }else{
                    $('#tip1').addClass('fade')
                    $('#tip2').removeClass('fade')
                    break;
                }    
      	}
    }
 })
}

解题思路:用Ajax请求到数据,也可以不用Ajax,用get,axios都可,只要能请求到数据都行,我们需要的数据是一个数组。然后把请求到数据给一个变量,遍历这个数组,判断用户输入的值是否等于数据里面的值,然后再相应添加和删除fade类就可。

4.【功能实现】搜一搜呀

在这里插入图片描述
核心代码:

return this.postList.filter(item=>
    item.title.includes(this.search)

解题思路:对存放卡片的postList写一个过滤方法,拿到标题title之后,用includes方法筛选this.search

5.宝贵的一票

 $(".add").click(function () {
          // TODO 待补充代码
          // 获取list的长度
          let c1 = $('.list').children().length
          // 在添加选项时,先判断里面是否有两个数据,有就添加上删除的符号
          if (c1 === 2) {
            $('.list').children().each((index, item) => {
              $(item).append(`<div class="col-sm-1">
    <!-- 删除图标 -->
    <img class="del-icon" src="./images/x.svg" alt="" />
  </div>`)
            })
          }
          if (c1 < 2) {
            $('.list').append(initRender(`选项${c1 + 1}`))
            console.log(initRender(`选项${c1 + 1}`));
          } else {
            $('.list').append(`<div class="mb-3 row item">
  <label class="col-sm-2 col-form-label txt">选项${c1 + 1}</label>
  <div class="col-sm-9">
    <input type="text" class="form-control" />
  </div>
  <div class="col-sm-1">
    <!-- 删除图标 -->
    <img class="del-icon" src="./images/x.svg" alt="" />
  </div>
</div>`)
          }
  });
        $(document).on("click", ".del-icon", function () {
          // TODO 待补充代码
          $(this).parents('.row').remove()
          let c1 = $('.list').children().length
          //法一
            $('.list').children().each((index,item)=>{
              $(item).children('label').text(`选项${index+1}`)
              if($('.list').children().length<=2){
                $(item).children()[2].remove()
              }
            }) 
        });
        //法二  第二个方法相对第一个来说更简洁更好理解一点
             // if($('.list').children().length<=2){
          //   $('.col-sm-1').remove()
          // }
          //这里也可以用箭头函数 用了箭头函数就不能用this
          // $(".list").children("div").each(function(i,val){
          //   $(this).children("label").text((`选项${i + 1}`))
          // })
      })()
    );

解题思路:首先先获取到list的长度,也就是我们需要添加的数据的长度,根据题意,实现点击新增一个选项,当页面中选项大于2个时,选项跟随删除按钮,在新增选项前先判断一下页面是否已经有两个选项,已有两个选项的话就加上删除按钮,然后再增加新的选项(这里直接把题目给dom结构cv即可,选项的长度也就是当前list的长度加一),小于两个选项就不显示删除按钮,至于怎么不显示删除按钮,细心观察会发现题目给的代码已经有了(initRender(选项${c1 + 1})),直接cv即可,删除按钮的话有个细节就是删除选项后,左侧的选项号需要刷新一下,这题虽然是个10分题,但是代码量挺多,内部逻辑不是很难。

7.水果叠叠乐

解题思路:这题的考点就是怎么生成一个范围内n个随机数,对Math函数熟悉的话很容易做出来,细节就是需要判断是否有重复的数据

 $("#card li").on("click", function () {
        // TODO: 待补充代码
      //  console.log( $(this));
        let c1 = $('#box li').length
        // 超过七个不添加
        if(c1===7) return
        // 因为不能操作元素本身,所以要克隆一份
        $('#box').append($(this).clone())
        $(this).hide()
        // 获取当前点击元素的data-id attr()是获取元素的属性
        let data = $(this).attr('data-id')
        // 定义一个计数器
        let flag=0
        // 用jquery的eacg遍历box里面的li 这里切记不能用箭头函数,箭头函数会改变this的指向
        $('#box li').each(function(){
          // 如果box里面li的data-id等于当前点击的data-id,flag++
          if(data==$(this).attr('data-id')){
            flag++
          }
        })
        
        if(flag==3){
          // 当flag等于3时,再次遍历box里面的li,把box里面li的data-id等于当前点击的data-id相同的删除
          $('#box li').each(function(){
            if(data==$(this).attr('data-id')){
            $(this).remove()
            }
          })
          // 计数器归零,不归零也可以检测通过
          flag=0
        }
        // console.log($('#card li').attr('data-id'));
      });

解题思路:这题解题思路都写注释了,有个坑,就是不能直接追加到box里面,不能都它本身,得克隆一份。

8.粒粒皆辛苦

axios.get('./data.json').then(res => {
      // console.log(res.data.data);
      let data = res.data.data
      let source = [
        ["全部", "2017", "2018", "2019", "2020", "2021", "2022"],
        ["小麦"],
        ["大豆"],
        ["马铃薯"],
        ["玉米"],
      ]
      for(let item in data){
          // console.log(data[item].wheat);
          source[1].push(data[item].wheat)
          source[2].push(data[item].soybean)
          source[3].push(data[item].potato)
          source[4].push(data[item].corn)
      }
      option.dataset.source=source
      myChart.setOption(option);
      console.log(source);
    })

解题思路:这题实际上就算考的转换数据类型,这里是先自己写好了题目所需要的数据格式,然后把请求到的数据往里追加,其实这题可以直接自己手写数据硬塞进去,如果比赛发现可以手写数据的,又刚好没啥思路的情况下,那么不要犹豫,手写数据追加进去,很好用!!!

9.芝麻开门

题目要求
在这里插入图片描述

/ TODO:待补充代码
  // 转化为dom
  div.innerHTML=template
  // 通过 appendChild 方式插入到 body 中
  document.querySelector('body').appendChild(div)
  //mPrompt 函数必须返回一个 promise 对象
  return new Promise((rel,rej)=>{
    // 给确定按钮添加一个监听事件
    document.querySelector('#confirm').addEventListener('click',function(){
      // 在对话框中的输入框中输入文字后,点击确认按钮,对话框消失, 
      // promise 返回成功,promise 成功的值为输入的值。
      // 获取input中输入的值
      let str = document.querySelector('input').value
      rel(str)
      // 删除对话框
      document.querySelector('.modal').remove()
    })
    document.querySelector('#cancel').addEventListener('click',function(){
      rej(false)
      document.querySelector('.modal').remove()
    })
  }) 

解题思路:这题一开始觉得挺难的,考到了我不擅长的promise,但是后来仔细跟着题意走,发现也不是那么难,这里我给按钮加的是addEventListener()监听点击事件,如果是单纯的点击事件也可以通过检测。

10.大电影

//jQuery解法
    $('.card-body-option img').on('click', function () {
      if ($(this).attr('src') === './images/hollow.svg') {
        $(this).attr('src', './images/solid.svg')
        $('#toast__container').css("display", "block")
        setTimeout(() => {
          $('#toast__container').css("display", "none")
        }, 2000);
        $('.toast__close img').on('click',function(){
          $('#toast__container').css("display", "none")
        })
      } else {
        $(this).attr('src', './images/hollow.svg')
      }
    })
    //原生js写法
    let img = document.querySelector('.card-body-option-favorite').querySelector('img')
      let src1=img.getAttribute('src')
      img.addEventListener('click',function(){
        if(src1==='./images/hollow.svg'){
          img.src='./images/solid.svg'
          src1 = './images/solid.svg';
          document.querySelector('#toast__container').style.display='block'
          setTimeout(() => {
            document.querySelector('#toast__container').style.display='none'
          }, 2000);
          let close=document.querySelector('.toast__close')
          close.onclick=function(){
            document.querySelector('#toast__container').style.display='none'
          }
        }else if(src1==='./images/solid.svg'){
          img.src='./images/hollow.svg'
          src1 = './images/hollow.svg';
        }
      })

解题思路:这题其实逻辑并不难,注意些细节就好了,我自己在做的时候就因为图片的路径没有加./一直通过不了,找了好久;原生js解法需要的注意的点就是执行完if之后要手动该一下它的路径才能实现切换,如果不加这句
src1 = ‘./images/solid.svg’;就只能点击一次。

11.消失的token

先看代码

var app = new Vue({
            el: '#app',
            store,
            data() { },
            computed: {
                welcome() {
                    return $store.getters.welcome
                },
                username() {
                    return $store.getters['user/username']
                },
                token() {
                    return store.getters['user/token']
                }
            },
            methods: {
                // 回车/点击确认的回调事件
                login(username) {
                    username && this.$store.commit('user/login', { username, token: 'sxgWKnLADfS8hUxbiMWyb' })
                    username && this.$store.commit('say', '登录成功,欢迎你回来!')
                }
            }
        })

这里考到vuex的一些基础语法以及命名空间,先看到index.js下的的代码

const store = new Vuex.Store({
    modules: {
    //模块名base对应的BaseModule,user对应的是UserModule
        base: BaseModule,
        user: UserModule,
    },
})
window.$store = store

再看到UserModule.js和BaseModule.js下的代码

const UserModule = {
    // 开启了命名空间功能 
    // '模块名/模块中的getters或mutations'
    namespaced: true,
    state: () => ({
        username: '',
        token: null,
    }),
    getters: {
        username(state) {
            return state.username
        },
        token(state) {
            return state.token
        }
    },
    mutations: {
        login(state, { username, token }) {
            state.username = username
            state.token = token
        },
    },
}
const BaseModule = {
    state: () => ({
        welcome: '请输入用户名登录系统'
    }),
    getters: {
        welcome(state) {
            return state.welcome
        },
    },
    mutations: {
        say(state, content) {
            state.welcome = content
        },
    },
    actions: {}
}
//BaseModule
const BaseModule = {
    state: () => ({
        welcome: '请输入用户名登录系统'
    }),
    getters: {
        welcome(state) {
            return state.welcome
        },
    },
    mutations: {
        say(state, content) {
            state.welcome = content
        },
    },
    actions: {}
}

可以看到只有UserModule 开启了命名空间的功能(namespaced: true),语法(‘模块名/模块中的getters或mutations’),因为开启了命名空间的功能,所以我调用的时候就要使用一些相关的语法,还有一个就细节在上面需要注册一下store

12.渐变色背景生成器

const inputs = document.querySelectorAll(".controls input");
const gradient = document.querySelector('.gradient')
console.log(inputs[0]);
inputs[0].addEventListener('change',function(){
    gradient.style.setProperty('--color1',inputs[0].value)
})
inputs[1].addEventListener('change',function(){
    gradient.style.setProperty('--color2',inputs[1].value)
})

解题思路:这题就是给两个输入框绑定一个监听事件,重要的是得知道setProperty的用法,知道它的用法就很简单,不然用原生js去改变它的背景很麻烦。

13.绝美宋词

<body>
  <div id="app">
    <h1 style="text-align: center">输入关键字,找一首词</h1>
    <!-- TODO:待补充代码 -->
    <div class="search-form">
      <!-- 用@input 每输入一个字都会出发该事件 -->
      <input @input="search" type="text" id="search" v-model="val" class="search" placeholder="词牌名 词句 词人" />
      <ul class="suggestions">
        <!-- 每一首完整词句用一个 li 包裹 -->
        <!-- v-for遍历深拷贝的数据 -->
        <li v-for="(item,index) in datalist" :key="index">
          <!-- 将匹配到的数据高亮显示,用v-html是因为它不会解析HTML代码 -->
          <span class="poet" v-html="highlight(item.poetry_content)"> </span>
          <span class="title" v-html="highlight(item.title+'-'+item.author)"></span>
        </li>
      </ul>
    </div>
  </div>
  <script>
    let vm = new Vue({
      el: '#app',
      // TODO:待补充代码
      data() {
        return {
          // 定义一个双向绑定input框输入的值
          val: "",
          // 定义list存放源数据
          list: [],
          // 存放深拷贝后的数据
          datalist:[]
        }
      },
      created() {
        axios.get('./data.json').then(res => {
          // console.log(res.data);
          this.list = res.data
        })
      },
      methods: {
        // 过滤方法
        search(item) {
          // 对源数据进行深拷贝3
          this.datalist=JSON.parse(JSON.stringify(this.list))
          // 保证输入框不能为空
          if (this.val) {
            // 对输入的值进行过滤,
            this.datalist = this.datalist.filter(item => {
              return item.title.includes(this.val) || item.poetry_content.includes(this.val) || item.author.includes(this.val)
            })
          } else {
            // 如果为空则不展示数据
            this.datalist = []
          }
        },
        highlight(str) {
          //  $& -- 表示全部匹配组匹配的结果
          //用replaceAll方法替换匹配到的数据
          return str.replaceAll(this.val,`<span class="highlight">$&</span>`)
        }
      }
    })
  </script>
</body>

解题思路:第一小问的数据请求没什么可说的了,第二小问是要实时显示词牌名,对拿到的数据进行一个过滤就好了,切记一个细节,不能改变源数据,可以定义一个新的数组存放数据或者对请求的数据进行深拷贝,两者都差不多,最后是要对input框输入的值进行一个高亮展示,这里写一个highlight方法,用replaceAll去替换全部关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯是中国最具影响力的计算机竞赛之一,旨在选拔和培养优秀的计算机人才。14届蓝桥杯python模拟赛第二期真题是该竞赛的一个示例题目,以下是对该题目的回答。 题目要求参赛选手编写一个程序,实现以下功能:输入一个字符串,判断该字符串是否是回文串。回文串是指正读和反读都一样的字符串。如果输入的字符串是回文串,则输出“Yes”,否则输出“No”。 要实现这个功能,可以采用以下步骤: 1. 获取用户输入的字符串。 2. 使用Python的切片操作,将字符串从尾到头进行反转,得到一个新的字符串。 3. 判断新字符串是否和原字符串相等。 4. 根据判断结果输出“Yes”或“No”。 以下是一个可能的程序实现: ```python # 获取用户输入的字符串 s = input("请输入一个字符串:") # 反转字符串 reverse_s = s[::-1] # 判断是否是回文串 if s == reverse_s: print("Yes") else: print("No") ``` 上述程序中,我们先使用`input()`函数获取用户输入的字符串,并将其保存在变量`s`中。然后,我们使用切片操作`s[::-1]`得到一个新的字符串`reverse_s`,该字符串是原字符串`s`的反转。最后,我们判断`s`和`reverse_s`是否相等,如果相等,则输出“Yes”,否则输出“No”。 通过这个简单的程序,我们可以判断一个字符串是否是回文串。这个问题虽然简单,但在实际的计算机编程中,对字符串的处理是非常常见的任务,因此掌握这种处理方式对于进一步提升编程能力是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值