Python基础练习题(二)

  • 1.素数判断
  • 2.构造multi()
  • 3.csv文件转换
  • 4.标准差计算
  • 5.集合对应值
  • 6.进制转换
  • 7.集合求并
  • 8.账号验证
  • 9.密码安全等级
  • 10.计算斐波那契数



个人收集整理的适合Python小白学习的基础练习题(二)

1.素数判断

当这个数是素数的时候输出 ‘True’ ,不是素数输出 ‘False’ 。
当输入一些奇怪的字符串,这个时候你需要输出 ‘invalid’。

import math
def Prime_num(num):
	if num <= 1:
		return False
	for i in range(2, int(math.sqrt(num) + 1)):
		if num % i == 0:
			return False
	return True
num = input()
if num.isdigit():
	print(Prime_num(int(num)))
else:
	print('invalid')

2.构造multi()

输入一行表示字符串,保证字符串的格式为: multi(参数列表)
其中参数列表中每个数以逗号分隔。
如果输入的每个数类型均相同,输出乘积; 否则输出第几个参数不合法,形式为 :
Invalid arg x
x 表示第 x 个参数不合法

def multi(*n):
	result = 1
	count = 0
	try:
		for i in n:
			count += 1
			i = i + 1 - 1 #判断是否为数字
			result *= i
	except TypeError:
		return ('Invalid arg %d'%count)
	return result
print(eval(input()))

3.csv文件转换

输入多行,表示一个 csv 文件,输出多行,表示你的输出。注意逗号都需要换成 \t 。

lines = ''
stopword = ''
try:
	for line in iter(input, stopword):
		lines += line + '\n'
except EOFError:
	pass
after_lines = lines.replace(',', '\t')
print(after_lines)

4.标准差计算

求标准差,输入多行,每行表示一个整数
输出的标准差要求利用科学计数法表示,且只能输出 2 位数,例如 1.2e+09。

方法一:使用numpy库
import numpy as np
nums = []
end = ''
try:
	for line in iter(input, end):
		nums.append(int(line))
except EOFError:
	pass
def dev(nums):
	dev_nums = np.std(nums, ddof = 1)
	if dev_nums >= 10:
		return format(dev_nums, '.1e')
	else:
		return format(dev_nums, '.1f')
		
print("dev = {}.".format(dev(nums)))

方法二:不使用numpy库
import math
nums = []
end = ''
try:
	for line in iter(input, end):
		nums.append(int(line))
except EOFError:
	pass

def dev(nums):
	meanvalue_nums = sum(nums) / len(nums)
	sum_differ = 0
	for i in range(0, len(nums)):
		sum_differ += math.pow(nums[i] - meanvalue_nums, 2)
	standdev = math.sqrt(sum_differ / (len(nums) - 1))
	return standdev

def devv(nums):
	dev_nums = dev(nums)
	if dev_nums >= 10:
		return format(dev_nums, '.1e')
	else:
		return format(dev_nums, '.1f')

print("dev = {}.".format(devv(nums)))

5.集合对应值

输入第一行表示一个集合。 第二行表示我想要知道的键,输出键对应的值

dict_you = eval(input())
key_you = input()
print(dict_you[key_you])

注意:
这里可有用三种方法转换字符串
1.eval:不安全,容易被用户恶意操作
2.ast.literal_eval: 安全,专门用于字符串类型转换其它类型
3.json.loads: 只能转换外单引号,内双引号的字符串

6.进制转换

输入一个十进制数转换为十六进制输出

num = int(input())
print(hex(num))

7.集合求并

输入两行,每行表示一个集合,每个集合的元素(均为数字)以一个空格分隔。输出一行表示集合的并。

filist = map(int, input().split())
selist = map(int, input().split())
sum_list = set(filist) & set(selist)
print(sum_list)

8.账号验证

用户有三次输入账号和密码的机会,如果输入正确,则输出"SUCCESS",三次输入错误,则输出"FAILED";
正确账号:“Pile”
正确密码:“MAKIKAWAYI”

i = 0
while i < 3:
name = input()
key = input()
if name == 'Pile':
if key == 'MAKIKAWAYI':
print('SUCCESS')
exit(0)
i += 1
print('FAILED')

9.密码安全等级

给你一个密码,她想问你这个密码是不是安全的。
一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于 8 ,且不要超过 16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C…Z;
2.小写字母:a,b,c…z;
3.数字:0,1,2…9;
4.特殊符号:~,!,@,#,$,%,^;

输入数据第一行包含一个数 M (M ≤ 50) ,接下有 M 行,每行一个密码(长度最大可能为 50 ),密码仅包括上面的四类字符。
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出 YES ,否则输出 NO 。

import re
def keygrade(key):
	pattern1 = re.compile('[0-9]+')
	pattern2 = re.compile('[a-z]+')
	pattern3 = re.compile('[A-Z]+')
	pattern4 = re.compile('[~,!,@,#,$,%,^]+')
	if len(key) not in range(8, 17):
		return False
	typekey = 0
	if pattern1.findall(key):
		typekey += 1
	if pattern2.findall(key):
		typekey += 1
	if pattern3.findall(key):
		typekey += 1
	if pattern4.findall(key):
		typekey += 1
	if typekey >= 3:
		return True
	else:
		return False

M = int(input())
keylist = []
for i in range(0, M):
	keylist.append(input())
for i in range(0, M):
	if keygrade(keylist[i]):
		print('YES')
	else:
		print('NO')

10.计算斐波那契数

输入第一行包含一个正整数 T, 表示数据的组数。之后 T 行,每行一个正整数 n 。
然后输出T行,每行对应整数的斐波那契数(注意运行时间)

这里用非迭代计算斐波那契数
def fibonacci(num):
	if num <= 1:
		return 1
	else:
		a, b, c = 0, 1, 0
		for i in range(0, num):
			c = a + b
			a = b
			b = c
		return c
T = int(input())
numlist =[]
for i in range(0, T):
	numlist.append(int(input()))
for i in range(0, T):
	print(fibonacci(numlist[i]))