python应用——习题练习

习题1
题目描述:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,>输入”They are students.”和”aeiou”,
则删除之后的第一个字符串变成”Thy r stdnts.”

  • 输入描述:
    每个测试输入包含2个字符串
  • 输出描述:
    输出删除后的字符串
  • 示例1:
    输入
    They are students.
    aeiou
    输出
    Thy r stdnts
s1 = input('s1输入:')
s2 = input('s2输入:')
for i in s1:   定义i循环遍历s1中所有的字符串
    if i in s2:   判定i是否含有s2中的字符串
        s1 = s1.replace(i,'')   存在则替换为空
print(s1)
打印结果
s1输入:They are student.
s2输入:aeiou
Thy r stdnt.

习题2
. 设计一个程序,帮助小学生练习10以内的加法
详情:
- 随机生成加法题目;
- 学生查看题目并输入答案;
- 判别学生答题是否正确?
- 退出时, 统计学生答题总数,正确数量及正确率(保留两>位小数点);

import random  引入随机函数
count = 0  计数器  
right = 0  计数器
while True:   
    a = random.randint(0,9)   赋值随机值
    b = random.randint(0,9)
    print('%d + % d = ?' %(a,b))    a+b的值计算机内部计算不显示
    question = input('请输入答案或按q退出操作:')
    result = a + b      输入的数值等于a+b的值
    if question == str(result):    判断是否等于
        print('回答正确')    
        right += 1      回答正确a+1
        count += 1   答题总数+1
    elif question == 'q':   判断按q直接退出循环
        break
    else:
        print('回答错误')   判断回答错误
        count += 1   答题总数计数器加1
percent = (right / count) * 100    正确的除以回答的总数求正确率
print('测试结束,共答对%d道题,正确数量%d道。正确率%.2f%%' %(count,right,percent))

执行结果:
0 +  6 = ?
请输入答案或按q退出操作:5
回答错误
2 +  2 = ?
请输入答案或按q退出操作:4
回答正确
3 +  7 = ?
请输入答案或按q退出操作:11
回答错误
4 +  2 = ?
请输入答案或按q退出操作:8
回答错误
8 +  7 = ?
请输入答案或按q退出操作:15
回答正确
2 +  6 = ?
请输入答案或按q退出操作:8
回答正确
1 +  5 = ?
请输入答案或按q退出操作:6
回答正确
2 +  3 = ?
请输入答案或按q退出操作:5
回答正确
9 +  5 = ?
请输入答案或按q退出操作:q
测试结束,共答对8道题,正确数量5道。正确率62.50%
Process finished with exit code 0

习题三

  1. 随机生成100个卡号;
    卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
  2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
  3. 输出卡号和密码信息, 格式如下:
    卡号 :6102009001
    密码 : 000000

字典fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,
value 为字典所有键对应的初始值,seq – 字典键值列表。
romkeys()方法语法:dict.fromkeys(seq[, value])

import random
account_num = []  定义空列表
for i in range(100):
    account_num.append('6102009%.3d' %(i+1))
account_info = {}.fromkeys(account_num,'radhat') 
value -- 可选参数, 设置键序列(seq)的值。
print('卡号\t\t\t\t  密码')     \t制表符表示空四个字符,也称缩进,相当于按一下Tab键
for k,v in account_info.items():
    print(k,'\t\t\t',v)
打印结果
卡号				  密码
6102009001 			 radhat
6102009002 			 radhat
.........            ......   

习题四
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

  def cacluate(*args):     定义函数*args表示多个值
     avg =  sum(args) / len(args)   求平均数
     up_avg = [ ]      定义空列表
     for item in args:     循环遍历所有元素
         if item > avg:   判定item大于平均值
              up_avg.append(item)    添加到列表当中
     return avg,up_avg      返回值
a = cacluate(1,2,3,4,5,6,7)   指定函数变量元素
print(a)
打印结果
(4.0, [5, 6, 7])   打印一个字典里面含有列表

习题五
编写一个函数, 接收字符串参数, 返回一个元组,‘ehllo WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

def fun(x):     定义函授   
    upper_count = 0    设置计数器
    lower_count = 0
    for i in x:   循环遍历x的元素
        if i.isupper():     判定是否是大写字符串
            upper_count += 1+1
        elif i.islower():   判定是否是小写字符串
            lower_count += 1+1
        else:    不是
            continue    跳过此次循环
    return upper_count,lower_count   返回值
a = fun('echoll WORD')
print(a)
打印结果
(4, 6)

习题六
编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形
数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(bu包含k)的元素逆序;
- 将下标k及之后的元素逆序;
- [1,2,3,4,5] 2 [2,1,5,4,3]


def fun(li,k):    定义函数
    if k < 0 or k > len(li):   判断k不能为负数或k大于列表长度
        return 'error key'     返回k值有错
    return li[:k][::-1] + li[k:][::-1]    元素逆序并连接起来
print(fun([1,2,3,4,5,6],2))    打印指定元素,并指定k2
打印结果
[2, 1, 6, 5, 4, 3]

习题七
模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0.3, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

 import random   引入随机函数
rewardDict = {                定义字典
    '一等奖': (0,0.08),
    '二等奖': (0.08,0.3),
    '三等奖': (0.3,1.0)
}
def userfun():        定义函数
    num = random.random()      random.random()表示0-1之间的随机数。
    for k,v in rewardDict.items():       循环遍历字典当中的键-值对  
        if v[0] <= num < v[1]:        判定随机数大于0小于1
            return k     返回值(实际就是几等奖)
resultDict = {}    定义字典
for i in range(1000):     
    res = userfun()      定义获奖变量为res
    if res not in resultDict:       判定第一次获得奖
        resultDict[res]  = 1   
    else:
        resultDict[res] += 1    不是得奖的次数+1
for k,v in resultDict.items():    k:键123等奖,v:value值,获奖人次
    print(k,'——>',v)
打印结果随机
三等奖 ——> 679
二等奖 ——> 239
一等奖 ——> 82

习题八
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=10
18, a<=b;
输出:
输出对应的答案;

范例:
输入: 51 5000 10000
输出: 3

#先求平方和
def  f(n):
    n = str(n)
    sum = 0
    for item in n:
        sum += int(item) ** 2
    return sum
#print(f(13))
s = input()
li = []
for item in s.split():
    li.append(int(item))
k,a,b = li
count = 0
for i in range(a,b+1):
    if k*f(i) == i:
        count += 1
print(count)
打印结果
51 5000 10000
3

(2018-腾讯-在线编程题)

  • 题目描述:
    给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,>并输出结果。输
    入值小于1000。
    如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
    [2,3,5,7]
  • 输入描述:
    输入包括一个整数n,(3 ≤ n < 1000)
  • 输出描述:
    输出对数
  • 示例1 :
    输入:
    10
    输出:
    2
num = int(input())
def isPrime(num):
    for i in range(2,num):
        if num % i == 0:
            return False
    else:
        return True
primeli = [i for i in range(2,num) if isPrime(i)]   定义质数的变量
print(primeli)
primecount = 0
for item in primeli:
    if (num - item) in primeli and item <= num - item:
        primecount += 1
print(primecount)
打印结果
20
[2, 3, 5, 7, 11, 13, 17, 19]
2

假设有20个学生,学生名为westosX,学生分数在60~100之间,筛选出
成绩在90分以上得学生

方法一:
import random

stuInfo = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60,100)
    stuInfo[name] = score
highscore = {}
for name,score in stuInfo.items():
    if score > 90:
        highscore[name] = score
print(highscore)
打印结果
{'westos3': 94, 'westos7': 91, 'westos10': 93, 'westos12': 94, 'westos16': 99}

方法二:列表生成式

import random
stuInfo = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60,100)
    stuInfo[name] = score
print({name:score for name,score in stuInfo.items() if score > 90})
打印结果
{'westos1': 95, 'westos2': 91, 'westos3': 99, 'westos4': 95, 'westos5': 91, 'westos7': 96, 'westos9': 91, 'westos10':100, 'westos18': 91}

习题九
求最大公约数最小公倍数
概念
最大公约数:指两个或多个整数共有约数中最大的一个
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数
二者关系:两个数之积=最小公倍数最大公约数
MIN函数是Microsoft Excel中的公式,可表示为min(x,y)=0.5
(x+y-|x-y|), 作用是返回给定参数表中的最小值。函数参数可以是数字、空白单元格、逻辑值或表示数值的文字串,如果参数中有错误值或无法转换成数值的文字时,将引起错误。

num1 = int((input('请输入第一个数值:')))  字符串不能相加减所有要转换成整型(int)
num2 = int(input('请输入第二个数值:'))
min_num = min(num1,num2)         
for i in range(1,min_num+1):   i循环遍历1-min_num+1
    if num1 % i == 0 and num2 % i ==0:   这两个数值除以i的余都必须等于0
        gys  = i    最公约数
    gbs = (num2*num1)/gys   最小公倍数
print('%d和%d的最大公约数是:%d' %(num1,num2,gys))
print('%d和%d的最大公约数是:%d' %(num1,num2,gbs))
打印结果
请输入第一个数值:50
请输入第二个数值:20
5020的最大公约数是:10
5020的最大公约数是:100

习题十
99乘法表
为末尾end传递一个空字符串,这样print函数不会在字符串末尾添加一个换行符,而是添加一个空字符串。
print默认是打印一行,结尾加换行。end=’ '意思是末尾不换行,加空格

for i in range(1,10):
    #print(i)
    for j in range(1,1+i):
        print('%d*%d=%d\t' %(i,j,i*j),end='\n')   
        (end='\n'表示打印完一行换行,\t相当于空格)

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值