读入一个整数N,分别计算如下内容:
- N的绝对值;
- N与10进行同符号加法、减法和乘法运算,同符号运算指使用N的绝对值与另一个数进行运算,运算结果的绝对值被赋予N相同的符号,其中,0的符号是正号。
- 将上述4项结果在一行输出,采用空格分隔,输出结果均为整数。
方法
num = eval(input())
a = abs(num)
b = a + 10
c = a - 10
d = a * 10
if num < 0: # 若原符号为负,先绝对值后加符号,保证均同号
b = -abs(b)
c = -abs(c)
d = -abs(d)
elif num >= 0: # 若原符号为正,绝对值,保证均同号
b = abs(b)
c = abs(c)
d = abs(d)
print('{} {} {} {}'.format(a,b,c,d))
根据下面公式计算并输出x的值,a和b的值由用户输入,括号里的数字是角度值, 圆周率的值使用数学常数math.pi。
输入格式: 输入包括两行, 每行一个数字。
输出格式: 一个数值
方法
import math
a = eval(input())
b = eval(input())
c = math.radians(60) # 角度值转换成弧度值
d = 2*a*math.sin(c)*math.cos(c) # math.sin(x)中x应为弧度值
x = (math.pow(d,0.5)-b)/(2*a)
print(x)
相传古代印度国王舍罕要褒赏他的聪明能干的宰相达依尔 (国际象棋发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘第一个格子里放一粒麦子,第二个格子里放两粒,第三个格子里放四粒,按此比例以后每一格加一倍,一直放到64格(国际象棋棋盘是8×8=64格),我就感恩不尽,其他的我什么也不要了,”国王想:“这有多少,还不容易!”让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又没有了,结果全印度的粮食全部用完还不够,国王纳闷,怎样也算不清这笔账,请你帮国王计算一下,共需多少粒麦子,写出程序。
方法
sum = 0
for i in range(64):
a = pow(2,i) #每格的个数
sum += a
print(sum)
给定某数字a(1≤a≤9)以及非负整数n(0≤n≤100000),求数列之和sum=a+aa+aaa+⋯+aa⋯a(n个a)。例如a=2, n=3时,sum=2+22+222=246。
- 输入有两行:第一行输入数字a , 第二行输入非负整数n
- 输出格式: 输出其N项数列之和S的值。
方法
a = eval(input())
b = eval(input())
num = 0
sum = 0
for i in range(b):
c = a * pow(10,i) # 每一个数的位数
num = num + c # 每一个数
sum = sum + num
print(sum)
用户输入一个字符串,分别统计其中小写字母、大写字母、数字、空格和其他字符的个数,并在一行内输出小写字母、大写字母、数字、空格和其他字符的个数。
输入格式 : 输入一个字符串
输出格式 : 在一行内输出小写字母、大写字母、数字、空格和其他字符的个数
str = input()
upper = 0
lower = 0
digit = 0
space = 0
other = 0
for i in str:
if i.islower(): # 小写
lower = lower + 1
elif i.isupper(): # 大写
upper = upper + 1
elif i.isnumeric(): # 数字
digit = digit + 1
elif i.isspace(): # 空格
space =space + 1
else: # 其他
other = other + 1
print(lower,upper,digit,space,other)
黑客语(Leet)是从网络发展起来的一种文字书写方式。通常将英语中的字母替换为数字和特殊符号。这种方式被很多黑客组织所使用。由于具有隐密性,所以它也广泛被用于密码中。使用Leet书写的密码,不会增加密码记忆的复杂度,但却可以提高密码的强度。常见的转化规律有, 替 换 s , 3 替 换 e , 4 替 换 a , 0 替 换 o , 1 替 换 i 等 。 例 如 , c a t s 使 用 L e e t 书 写 , 就 变 为 c 47 替换s,3替换e,4替换a,0替换o,1替换i等。例如,cats使用Leet书写,就变为c47 替换s,3替换e,4替换a,0替换o,1替换i等。例如,cats使用Leet书写,就变为c47。一个纯字母的密码就转化为字母、数字构成的复杂密码了。
table = ‘’.maketrans(before, after),这条语句可以创建映射表,str1.translate(table)语句可以将table中的字符按映射表中的顺序进行替换。
替换表如下:
0 1 3 4 5 6 7
o i e a s g t
写一个程序,用于破解一个加密的字符串。M4k3 G006l3 Y0ur H0m3p463!
方法
str1 = input()
before = '0134567'
after = 'oieasgt'
table = ''.maketrans(before, after) #创建映射表
print(str1.translate(table))
用户输入一个字符串做为密码,判断密码强度,规则为:密码长度小于8弱密码,密码长度大于等于8且包含至少2种字符为中等强度、密码包含3种字符为强、包含全部4种字符为极强。
提示:
string.digits 可返回’0123456789’
string.ascii_lowercase 可返回’abcdefghijklmnopqrstuvwxyz’
string.ascii_uppercase 可返回’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.punctuation 可返回’!"#$%&’()*+,-./:;<=>?@[\]^_`{|}~’
- 输入格式 : 输入一个字符串
- 输出格式: 密码强度的判断结果,分:弱、中、强、极强,共四种
方法
import string
a = input()
q = w = e = r = 0 # 设定一个默认值,通过判断来改变判断总值对应强度
for i in a:
if i in string.digits: # 如果有数字 默认值变为1
q = 1
elif i in string.ascii_lowercase: # 如果有小写 默认值变为1
w = 1
elif i in string.ascii_uppercase: # 如果有大写 默认值变为1
e = 1
elif i in string.punctuation: # 如果有特殊字符 默认值变为1
r = 1
x = q + w + e + r # 判断后的测试总值
if len(a) < 8: #长度小于8,直接为若
print('弱')
else: # 除去长度大于八的,根据判断值来判断强度
if x < 2:
print('弱')
if x == 2:
print('中')
elif x == 3:
print('强')
elif x == 4:
print('极强')
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n位数(n≥3 且 n<6),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153,此处’^'表示幂运算)。编程寻找并输出n位的水仙花数,n由用户输入,每行输出一个数字。
- 输入格式: 输入一个介于3到5之间的正整数(包括3和5)
- 输出格式: 输出n位的水仙花数,每行一个数
方法
n = int(input())
if n>=3 and n<6:
for i in range(10**(n-1),10**n): #遍历范围内的所有数字,穷举判断
sum=0
for j in map(int,str(i)): # map方法将数字整数化,并遍历每一位
sum=sum+j**n # 水仙花数定义
if sum==i:
print(i)
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。本题要求对给定的非负整数n,求该级数的前n项和。
- 输入格式: 输入第一行中给出非负整数n(≤100)。
- 输出格式: 在一行中输出部分和的值,保留小数点后八位。
方法
import math
n = eval(input())
e = 1
for i in range(1,n+1):
e += 1 / (math.factorial(i)) # math库中求阶乘的方法
print('{:.8f}'.format(e))
根据下面的泰勒级数关系式,求圆周率的值,当最后一项的值小于给定阈值时结束。
- 输入格式:输入在一行中给出小于1且大于0的阈值。
- 输出格式:在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
方法
threshold = eval(input())
pi4 = k = 0
f = 1
while abs(1 / (2 * k + 1)) >= threshold: # 当最后一项的值小于给定阈值时结束while循环
pi4 = pi4 + f * 1 / (2 * k + 1) #计算公式 累加
k = k + 1
f = -f
print("{:.6f}".format(pi4*4))
目前我国个人所得税计算公式如下:
应纳个人所得税税额= (工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数
个税免征额为5000元/月,2018年10月1日起调整后,也就是2012年实行的7级超额累进个人所得税税率表如下:
全月应纳税所得额(含税级距) 税率(%) 速算扣除数
不超过3,000元 3 0
超过3,000元至12,000元的部分 10 210
超过12,000元至25,000元的部分 20 1,410
超过25,000元至35,000元的部分 25 2,660
超过35,000元至55,000元的部分 30 4,410
超过55,000元至80,000元的部分 35 7,160
超过80,000元的部分 45 15,160
请编写一个个税计算器,用户输入为应发工资薪金所得扣除五险一金的金额,输出应缴税款和实发工资,结果保留小数点后两位。当输入数字小于0时,输出“error”。
方法
s = float(input())
if s <0:
print("error")
else: # 根据不同范围逐级判断即可
salary = s - 5000
if salary <=3000:
fee, num = 3,0
elif 3000 < salary <= 12000:
fee, num = 10, 210
elif 12000 < salary <= 25000:
fee, num = 20, 1410
elif 25000 < salary <= 35000:
fee, num = 25, 2660
elif 35000 < salary <= 55000:
fee, num = 30, 4410
elif 55000 < salary <= 80000:
fee, num = 35, 7160
elif 80000 < salary :
fee, num = 45, 15160
tax = salary * fee / 100 - num
print("应缴税款{:.2f}元,实发工资{:.2f}元。".format(tax,salary + 5000 - tax))
微软产品一般都一个25位的序列号,是用来区分每份微软产品的产品序列号。产品序列号由五组被“-”分隔开,由字母数字混合编制的字符串组成,每组字符串是由五个字符串组成。如:
36XJE-86JVF-MTY62-7Q97Q-6BWJ2
每个字符是取自于以下24个字母及数字之中的一个:
B C E F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9
采用这24个字符的原因是为了避免混淆相似的字母和数字,如I 和1,O 和0等,减少产生不必要的麻烦。
随机数种子函数语法为:random.seed(n)
- 输入格式:
在2行中分别输入一个正整数:
第1个整数,代表要生成的序列号的个数
第2个正整数代表随机数种子- 输出格式:
指定个数的序列号
方法
import random
def key(num): # 生成n个序列号函数模块
for i in range(num): # 循环n次,即生成n个序列号
keySn = []
for j in range(5): # 一个序列号为5组5位数合成,逐一随机
s = ''
characters = 'BCEFGHJKMPQRTVWXY2346789'
for j in range(5): # 每组每位数,随机生成字符串合并
s = s + random.choice(characters)
keySn.append(s)
key = '-'.join(keySn) #使用-将五个字符串合并
print(key)
num = int(input())
n = input()
random.seed(n)
key(num)