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]))