蓝桥杯第二集合:还是简单的函数问题

扫雷: map函数 :a=map(int,input().split())   list(a) 方向数组 print(,end=" ")

一大哥写的题解有注解

import os
import sys

# 请在此输入您的代码
# 大体思想是开两个数组,一个放输入的样例 一个放vis标记数组,然后遍历样例,
# 如果碰到雷,就在标记数组把这个位置标为9.然后把这个位置相邻的八个位置+1
#   由于不是雷的位置周围最多有八个雷,所以那些位置标记不会超过8 不会和9冲突
n,m = map(int,input().split())
tu = []#用来存输入
for i in range(n):#存进去
    tu.append(list(map(int,input().split())))

vis = [[0 for j in range(m)]for i in range(n)]#写一个与tu行数和列数都一样的标记数组
dir = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]#写一个方向数组

for i in range(n):#遍历整个tu
    for j in range(m):
        if tu[i][j]==1:#如果这个位置是有雷
            vis[i][j]=9#就将标记数组标记为9
            for x in dir:#然后对周围八个位置进行检查遍历
                xi = i +x[0]
                xj = j +x[1]
                if 0<=xi<=n-1 and 0<=xj<=m-1:#筛选八个位置中不出界的位置
                    if vis[xi][xj]!=9:#如果这个位置不是9 
                        vis[xi][xj]+=1#就将这个位置+1 表示周围有一个雷了  
# #位置上的数会不断累加,而且最多不会超过8 因为最多只有周围八个有雷 所以vis标记
# 的9和这个不会冲突
for i in range(n):#循环遍历输出
    for j in range(m):
        print(vis[i][j],end=' ')
    print()

明明的随机数:list和set的区别,set里无重复的成分

n = int(input())
lis = list(set(map(int, input().split(" "))))
lis.sort()
print(len(lis))
print(*lis)  # *的解包操作

灌溉:2次列表的命名顺序 先m后n dir的方位列表

n,m=map(int,input().split())
t=int(input())
lst=[]
vis=[[0]*m for i in range(n)]
dir=[(0,1),(0,-1),(1,0),(-1,0)]
cnt=t

def fun(x,y):
    global cnt
    vis[x][y]=1
    for i,j in dir:
        nx,ny=x+i,y+j
        if nx<0 or nx>=n or ny<0 or ny>=m:
            continue
        if vis[nx][ny]==0:
            cnt+=1
            vis[nx][ny]=1


for i in range(t):
    a,b=map(int,input().split())
    x,y=a-1,b-1
    fun(x,y)

print(cnt)

绝对值函数:abs()

串的处理

"""
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:

把每个单词的首字母变为大写。

把数字与字母之间用下划线字符(_)分开,使得更清晰

把单词中间有多个空格的调整为 1 个空格。

"""

sequence = input()

# 把单词中间有多个空格的调整为 1 个空格。
sequence = ' '.join(sequence.split())

# 把每个单词的首字母变为大写。
words = sequence.split()
sequence = ' '.join(word[0].upper() + word[1:] for word in words)

# 把数字与字母之间用下划线字符(_)分开,使得更清晰
result = []
for char in sequence:
    if result and char.isdigit() and result[-1].isalpha():
        result.append('_')
    elif result and char.isalpha() and result[-1].isdigit():
        result.append('_')
    result.append(char)
print(''.join(result))

幸运数字:int(h,16)  二进制转换

import os
import sys

# 请在此输入您的代码
i = 0
count = 0
def add(num): #定义函数,用来计算二进制,八进制,十进制数的和
    lst = []
    for j in num:
       lst.append(int(j))
    return sum(lst)
while i >= 0:
    i += 1
    if count < 2023:
        two = bin(i)[2:] #取对应二进制的数
        eight = oct(i)[2:] #取对八进制的数
        sixteen = hex(i)[2:] #取对应十六进制的数
        lst1 =[]
        for j in sixteen:
            lst1.append(int(j,16))
        if i % add(two) == 0 and i % add(eight) == 0 and i % sum(lst1) == 0 and i % add(str(i)) == 0: #用来判断是否满足题目条件
            count += 1
            # print(i)
        lst1 = []
    else:
        break
print(i-1)

二进制的转换

def my_bin(n):
    res = []
    while n != 0:
        res.append(str(n & 1))
        n = n >> 1
    res.reverse()
    return "".join(res)

n = 10
n = my_bin(n)
print(n)

sum(map) 迭代器

num = 12345
result = sum(map(int, str(num)))
print(result)

str(num)12345"12345" map(int, "12345")int[1, 2, 3, 4, 5] sum([1, 2, 3, 4, 5])15

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值