Python基础练习题-适合小白-(三)


个人整理收录的一些适合python小白学习的基础练习题(三)

1.最多重复元素计算

询问你这个序列里面出现次数最多的元素的出现次数。输入多行,一行一个数表示序列里面的每一个数。输出一行,表示出现次数最多的数字的出现次数。

lines = []
stopword = ''
try:
	for line in iter(input, stopword):
		lines.append(line)
except EOFError:
	pass
count_max = 0
for num in lines:
	count_max = max(lines.count(num), count_max)
print(count_max)

2.小于x的两个最大素数

输入一个大于等于 5 且小于 50000 的自然数 x,输出一个列表包含两个互不相同的小于x的最大素数

import math
def Prime(num):
	if num == 2:
		return True
	for i in range(2, int(math.sqrt(num)) + 1):
		if num % i == 0:
			return False
	return True

x = int(input())
outprime = []
for i in range(x, 1, -1):
	if Prime(i):
		outprime.insert(0, i)
	if len(outprime) == 2:
		break
print(outprime)

3.0 5卡片组合

n 张卡片,每张卡片上要么是 0,要么是 5
从其中选出若干卡片然后组成一些数字,你能找出所有可能的数字中能整除 90 的最大数字吗?若不存在,请输出 -1 。
输入第一行表示n张卡片
输入第二行表示每张卡片的值
输出最大值或-1

def maxlist(thelist):
	if 0 not in thelist:
		print(-1)
	elif 5 not in thelist:
		print(0)
	else:
		for i in range(thelist.count(5), 8, -1):
			if 5 * i % 9 == 0:
				print('5' * i + '0' * thelist.count(0))
				exit(0)
		print(0)
n = int(input())
filist = list(map(int, input().split()))
maxlist(filist)

4.进制转换(十转K)

给定一个十进制数N。N满足:除了最高位是2,其余都是3,且3的个数大于0。求N在K进制的表示.
输入一行两个整数N,K

N, K = map(int, input().split())
numlist = ''
while N:
	temp = N % K
	if temp >= 10:
		numlist = numlist + chr(ord('A') + temp - 10)
	else:
		numlist = numlist + str(temp)
		N //= K
print(numlist[::-1])

5.星号三角形

读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共 N 个星号。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

N = int(input())
half = N // 2
for i in range(0, half + 1):
	print(' ' * (half - i) + '*' * (2 * (i + 1) - 1) + ' ' * (half - i))

6.短号

.假设所有的短号都是是 6+手机号的后 5 位,注意,这个手机号码可能并不是 11 位的,这个时候你需要输出 “Halation - I can’t join it!”
输入数据的第一行是一个N(N <= 200),表示有N个数据,接下来的N行每一行为一个多位的手机号码,但是长度不会超过 50。
输出应包括 N 行,每行包括一个对应的短号或者提示信息,输出应与输入的顺序一致

N = int(input())
numlist = ["Halation - I can't join it!"] * N
for i in range(0, N):
	num = input()
if len(num) == 11:
	numlist[i] = '6' + num[-5::]
for i in range(0, N):
	print(numlist[i])

7.666

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

import re
youstr = input()
youstr = re.sub(r'6{10,}', "27", youstr)
youstr = re.sub(r'6{4,9}', "9", youstr)
print(youstr)

8.分数之和

输入两行两个分数,计算分数的和

from fractions import Fraction
a = input()
b = input()
c = Fraction(a) + Fraction(b)
if c == 0:
	print('0/1')
else:
	print(c)

9.重复元素

检测重复元素
第一行输入一个数N;然后输入N行,每行一个元素
输出最先重复元素的序号

N = int(input())
numlist = []
flag = False
for i in range(0, N):
	num = int(input())
	if num in numlist and flag == False:
		thenum = i + 1
		flag = True
	numlist.append(num)
print(flag)
if flag == True:
	print(thenum)

10.密码替换

为了准备账号,admin 有时需要为用户随机生成密码。
问题是总是有一些难以识别的密码,比如说1和l(L的小写字母),或者0和O(o的大写字母)。
一个解决方法是用@替换1,用%替换0,用L替换l,用o替换O。
现在你的任务是写一个程序来帮助 admin 核对账户信息并改变难以识别的密码。
每个输入文件包含一组测试数据。
对于每组输入数据,包含一个正整数N(<=1000),接着是N行账户信息。
每条账户信息包含一个用户名和一个密码,都是不包括空格的不超过10个字符的字符串。
对于每组输入数据,首先输出需要修改的密码总数M,接着输出N行修改后的账户信息,即用户名和对应的修改后的密码。账户必须按照和读入顺序一样的顺序输出。
如果没有账户需要修改,输出一行 “There are N accounts and no account is modified”,N为账户总数。但是,如果N为1,你必须输出 “There is 1 account and no account is modified” 。

import re
def reply(matched):
	if matched.group() == '1':
		return '@'
	elif matched.group() == 'l':
		return 'L'
	elif matched.group() == '0':
		return '%'
	elif matched.group() == 'O':
		return 'o'
N = int(input())
staccount = []
stcount = 0
for i in range(0, N):
	acname, ackey = input().split()
	if re.search(r'[0Ol1]',ackey):
		stcount += 1
		staccount.append(acname + ' ' + re.sub(r'[0Ol1]', reply, ackey))
if stcount == 0:
	if N == 1:
		print("There is 1 account and no account is modified")
	else:
		print("There are %d accounts and no account is modified"%N)
else:
	print(stcount)
for i in range(0, stcount):
	print(staccount[i])
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值