Python123 练习6

1. 同符号数学运算

读入一个整数N,分别计算如下内容:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. N的绝对值;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
  2. N与10进行同符号加法、减法和乘法运算,同符号运算指使用N的绝对值与另一个数进行运算,运算结果的绝对值被赋予N相同的符号,其中,0的符号是正号。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
  3. 将上述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))

2. 三角函数计算

根据下面公式计算并输出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)

3. 棋盘放米

相传古代印度国王舍罕要褒赏他的聪明能干的宰相达依尔 (国际象棋发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘第一个格子里放一粒麦子,第二个格子里放两粒,第三个格子里放四粒,按此比例以后每一格加一倍,一直放到64格(国际象棋棋盘是8×8=64格),我就感恩不尽,其他的我什么也不要了,”国王想:“这有多少,还不容易!”让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又没有了,结果全印度的粮食全部用完还不够,国王纳闷,怎样也算不清这笔账,请你帮国王计算一下,共需多少粒麦子,写出程序。

方法

sum = 0
for i in range(64):  
    a = pow(2,i)   #每格的个数
    sum += a
print(sum)

4. 数列求和

给定某数字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。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

  1. 输入有两行:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬第一行输入数字a‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ , 第二行输入非负整数n‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
  2. 输出格式: 输出其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)

5. 分类统计字符

用户输入一个字符串,分别统计其中小写字母、大写字母、数字、空格和其他字符的个数,并在一行内输出小写字母、大写字母、数字、空格和其他字符的个数。
输入格式 : 输入一个字符串
输出格式 : 在一行内输出小写字母、大写字母、数字、空格和其他字符的个数

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)

6. 黑客语解密

黑客语(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,3e4a0o1icats使Leetc47。一个纯字母的密码就转化为字母、数字构成的复杂密码了。
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))

7. 密码强度判断

用户输入一个字符串做为密码,判断密码强度,规则为:密码长度小于8弱密码,密码长度大于等于8且包含至少2种字符为中等强度、密码包含3种字符为强、包含全部4种字符为极强。
提示:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
string.digits 可返回’0123456789’
string.ascii_lowercase 可返回’abcdefghijklmnopqrstuvwxyz’
string.ascii_uppercase 可返回’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.punctuation 可返回’!"#$%&’()*+,-./:;<=>?@[\]^_`{|}~’

  1. 输入格式 : 输入一个字符串
  2. 输出格式: 密码强度的判断结果,分:弱、中、强、极强,共四种

方法

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('极强')
        

8. 水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n位数(n≥3 且 n<6),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153,此处’^'表示幂运算)。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬编程寻找并输出n位的水仙花数,n由用户输入,每行输出一个数字。

  1. 输入格式: 输入一个介于3到5之间的正整数(包括3和5)
  2. 输出格式: 输出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)

9. 求e的近似值

自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬本题要求对给定的非负整数n,求该级数的前n项和。

  1. 输入格式: 输入第一行中给出非负整数n(≤100)。
  2. 输出格式: 在一行中输出部分和的值,保留小数点后八位。

方法

import math
n = eval(input())
e = 1
for i in range(1,n+1):
    e += 1 / (math.factorial(i))    # math库中求阶乘的方法
print('{:.8f}'.format(e))

10. 使用泰勒级数公式计算圆周率

根据下面的泰勒级数关系式,求圆周率的值,当最后一项的值小于给定阈值时结束。

  1. 输入格式:输入在一行中给出小于1且大于0的阈值。
  2. 输出格式:在一行中输出满足阈值条件的近似圆周率,输出到小数点后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))

11. 个税计算器

目前我国个人所得税计算公式如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬
应纳个人所得税税额= (工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬
个税免征额为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))

12. 模拟生成微软序列号

微软产品一般都一个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)

  1. 输入格式:
    在2行中分别输入一个正整数:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬
    第1个整数,代表要生成的序列号的个数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬
    第2个正整数代表随机数种子
  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)   

如果文章内容或代码有问题,私信讨论

  • 27
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_泥鳅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值