python入门弱智题目

时间:2023-02-12 09:16:54

1.列表排序
描述:
给你一个列表 L, 对L进行升序排序并输出排序后的列表。

L.sort()
print(L)

2.字符串逆序
描述:
给你一个字符串 a, 请你输出逆序之后的a。
例如:a=‘xydz’

则输出:zdyx
分析:
如果给定的是列表那么我们直接reverse即可,但是发现是字符串,又不太好控制换行,所以直接上指令了: a[::-1] 或 a[-1::-1]

3.输出字典key
描述:
给你一字典a,如a={1:1,2:2,3:3},输出字典a的key,以’,’连接,如‘1,2,3’。要求key按照字典序升序排列(注意key可能是字符串)。

例如:a={1:1,2:2,3:3}, 则输出:1,2,3

分析: 这里需要用到如何遍历字典的知识,字典前面为键后面的叫值.
(1)遍历字典中的键:
for key in a.keys() :
(2) 遍历字典中的值:
for val in a.values():
(3)遍历整个字典:
for key,val in a.items():

知道这个就很简单了

#a={1:1,2:2,3:3}
b = []
for key in a.keys():
b.append(key)
b.sort()
print(",".join(str(x) for x in b))

PS:这里说一下join的用法,“,”.join(b) 意思就是将b字符串用‘,’拼接起来并组成一个字符串/
str(i)把i这个整数转化为字符串
4.输出字符奇数位置的字符串

描述:
给你一个字符串 a, 输出a中奇数位置字符构成的字符串(位置编号从1开始)。

例如:a=‘xyzwd’

则输出:xzd

分析:
简单暴力的方法就是直接for循环

#a = 'xyzwd'
b = [];
for i in range(0,len(a),2):
b.append(a[i])
print(''.join(b))

简单方法就是切片: print(a[0:len(a):2]).
a[0:len(a):2] 表示从0~len(a)-1 每次间隔两个字符

5.求解100以内的所有素数
描述:
输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格)。

分析:
我的做法是用到了定义函数
def + 函数名 (形参列表):

def isPrime(n):
if n < 2:
return False
else :
for i in range(2,n) :
if n % i == 0 :
return False
return True
a = []
for i in range(2,101):
if isPrime(i):
a.append(i)
print(" ".join(str(g) for g in a ))

6.求矩形面积

描述:
已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开。

例如:a = 3, b = 8

则输出:24 22
分析: 主要在于如何输出空格,只需要把空格当做字符串一起加入进去即可.

#a = 3
#b = 8
c = ' '
print(str(a*b) + c + str(2*(a+b)))

也有另一种做法:

x = a * b
y = 2*(a+b)
print('%s %s'%(x,y))

7.时间就是金钱

描述:
给你两个时间st和et(00:00:00<=st <= et<=23:59:59), 请你给出这两个时间间隔的秒数。
如:st=”00:00:00”, et=”00:00:10”, 则输出10.

分析:split用法

a = st.split(':')
b = et.split(':')
print((int(b[0])-int(a[0]))*3600+(int(b[1])-int(a[1]))*60+int(b[2])-int(a[2]))

8.公约数的个数
描述:
给你两个正整数a,b, 输出它们公约数的个数。

例如:a = 24, b = 36

则输出:6

分析:先求出二者最大公约数,根据整数分解唯一分解定理可以得出其因子个数,进而就是二者的公约数的个数

#a = 24
#b = 36

def gcd(x,y):
while(y):
r = x % y
x = y
y = r
return x

gg = gcd(a,b)
l = []
for i in range(2,gg+1):
if gg % i == 0:
num = 0
while(gg % i == 0):
num = num + 1
gg = gg / i
l.append(num)
ans = 1
for i in l :
ans = ans * (i + 1)
print(ans)

9.一马当先
描述:
下过象棋的人都知道,马只能走’日’字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘,
棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出-1.
如n=1,m=2,则至少需要1步;若n=1,m=3,则输出-1。
分析: 第一次用py写bfs.
这个题目学到了很多的东西,比如py的队列使用,,deque双端队列.
同时用字典做标记数组同时初始化问题.
二维列表等

from collections import deque

go = [(-2,-1),(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2)]//二维列表

def bfs (n,m) :
book = {(x, y): False for x in range(0,n+1) for y in range(0,m+1)}
//用字典来做标记数组
book[(0,0)] = True//给字典赋值
q = deque([(0,0,0)])//deque双端队列
while len(q) > 0:
p = q.popleft()//取出最左面的那个元素
for i in range(0,8):
x = p[0] + go[i][0]
y = p[1] + go[i][1]
if x < 0 or x > n or y < 0 or y > m:
continue
if book[(x,y)] == True:
continue
book[(x,y)] = True
q.append((x,y,p[2]+1))
if x == n and y == m :
return p[2]+1
return -1
print(bfs(n,m))

10.相同数字

描述:
给你一个整数列表L,判断L中是否存在相同的数字,
若存在,输出YES,否则输出NO。

分析:
可以简单的排序一下然后看相邻的是否有相同的即可》

#L = [1,1,2,2,3]
L.sort()
flag = False
for i in range(0,len(L)-1):
if L[i] == L[i+1]:
print("YES")
flag = True
break
if flag == False:
print("NO")

但是有一个更简单的方法就是利用python中的set(),set(L)将L这个列表中不同的元素做了一个集合, 里面不包含重复元素,如果最后得到的len(L)和len(set(L))长度不一样那么一定有重复的

if len(L) - len(set(L)) > 0:
print("YES")
else:
prnit("NO")

11.格式化时间

描述:
给你一个时间t(t是一个字典,共有六个字符串key(year,month,day,hour,minute,second),值为每个值为数字组成的字符串,
如t={‘year’:’2013’,’month’:’9’,’day’:’30’,’hour’:’16’,’minute’:’45’,’second’:’2’}
请将其按照以下格式输出, 格式:XXXX-XX-XX XX:XX:XX。如上例应该输出: 2013-09-30 16:45:02。

分析:z这里考虑到位数不够需要补前导0所以用到了简单的zfill用法,变为字符串,右对齐不够前面补0.

res = t['year'].zfill(4)+'-'+t['month'].zfill(2)+'-'+t['day'].zfill(2)+' '+t['hour'].zfill(2)+':'+t['minute'].zfill(2)+':'+t['second'].zfill(2)
print(res)