100例经典Python核心实战提升练习题汇总(二)

在编程这一块,我也只算是个学生,所以难免出现错误,希望各位发现问题或者有更好的答案,请及时斧正,不甚感激!

11.输入4位2进制数字,以逗号隔开,检验它们能否被5整除,满足条件的用逗号分隔符打印出来。比如输入0100, 0011, 1010, 1001,然后输出1010。

12.打印出[1000, 3000]中 每一位 都是偶数的数字,且用逗号隔开。

13.输入一组字符串,计算字符和数字的个数。假设输入: hello world! 123,输出:LETTERS 10 DIGITS 3。

14. 输入字符串,判断字符串是大写还是小写,并分别计算个数。假设输入:Hello world!,则输出:UPPER CASE 1 LOWER CASE 9

15.计算形如a+aa+aaa+aaaa的值,其中a表示一个数字,a由用户输入,假设输入9,那么输出:11106。

16. 输入一组数字,每个数字用逗号连接,输出相应的奇数list。假设输入:1,2,3,4,5,6,7,8,9,则输出:1,3,5,7,9

17.编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。 事务日志格式如下所示:D 100或W 200 D表示存款,而W表示提款。 假设为程序提供了以下输入: D 300 D 300 W 200 D 100 然后,输出应该是: 500

18.判断一组字符串是否满足密码要求,密码(密码之间用逗号隔开)要求如下: 1. 至少有一个小写字母[a-z] 2. 至少有一个数组[0-9] 3. 至少有一个大写字母[A-Z] 4. 至少有一个特殊字符[$#@] 5. 密码最大长度12,且如果输入","则只认为逗号之前的字符为密码。 比如输入:ABd1234@1,a F1#,2w3E*,2We3345,则密码为:ABd1234@1

19.您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字, 元组由控制台输入。 排序标准是: 1:根据名称排序; 2:然后根据年龄排序; 3:然后按分数排序。 优先级是name > age > 得分。 如果给出以下元组作为程序的输入:Tom,19,80;John,20,90;Jony,17,91;Jony,17,93;Json,21,85 然后,程序的输出应该是:[('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21 ','85'),('Tom','19','80')] 提示: 使用itemgetter来启用多个排序键。

20.问题: 使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

 提示: 考虑使用yield。

答案:

第十一题:

# split()通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,最后转换为列表
b = input('请输入4位二进制数字序列:').split(',')
# 创建一个空列表,准备接收符合条件的二进制数
l = []
# 遍历列表b
for i in b:
    # 如果列表b里的元素可以被5整除,则将对应的元素添加到列表l里
    if (int(i, 2) % 5) == 0:
        l.append(i)
# 对新的列表使用逗号连接,生成一个新的字符串result
result = ','.join(l)
# 打印新的字符串result
print(result)

答案:

第十二题:

第一种答案:

# 使用列表推导式加判断
# 注意:判断条件里首先要把元素i转换成字符串才可以使用下标,取到对应下标的值后转换为整型,再进行取余运算,然后才是判断余数是不是0,因为1000到3000都是4位数,所以下标自然是0到3
l = [i for i in range(1000, 3001)
     if int(str(i)[0]) % 2 == 0 and int(str(i)[1]) % 2 == 0 and int(str(i)[2]) % 2 == 0 and int(str(i)[3]) % 2 == 0]
print(','.join('%s' % i for i in l))

第二种答案:

# 先定义一个空列表,准备接收符合条件的数据
ans = []
# 遍历1000到3001
for i in range(1000, 3001):
    # 将所有数字转换成字符串,以便后面判断时使用下标
    tmp_str = str(i)
    # 使用下标取到对应的值后转换为整型,再进行取余运算,然后才是判断余数是不是0,因为1000到3000都是4位数,所以下标自然是0到3
    if int(tmp_str[0]) % 2 == 0 and int(tmp_str[1]) % 2 == 0 and int(tmp_str[2]) % 2 == 0 and int(tmp_str[3]) % 2 == 0:
        # 将符合条件的数字添加到之前准备的空列表中
        ans.append(tmp_str)

# 使用逗号分割符合条件的数字组成的列表并转换成字符串,最后打印出来
print((",".join(ans)))

第十三题:

第一种答案:

# 将用户输入的数据存储到字符串s里
s = input('请输入字符和数字:')
# 定义变量d、l,初始值为0,以备后面计数使用
c = 0
d = 0
# 遍历字符串s
for i in s:
    # 如果遍历到的字符串里的元素为字母,则变量c加1
    if i.isalpha():
        c += 1
    # 如果遍历到的字符串里的元素为数字,则变量d加1
    elif i.isdigit():
        d += 1
# 打印计算结果
print(f'LETTERS %d DIGITS %d' % (c, d))

第二种答案:

# 将用户输入的数据存储到字符串items里
items = input('请输入字符和数字:')
# 创建字典d,用来存储后续字母、数字计数
d = {"DIGITS": 0, "LETTERS": 0}
# 遍历字符串items
for c in items:
    # 如果遍历到的字符串里的元素为数字,则字典d里键为DIGITS的值加1
    if c.isdigit():
        d["DIGITS"] += 1
    # 如果遍历到的字符串里的元素为字母,则字典d里键为LETTERS的值加1
    elif c.isalpha():
        d["LETTERS"] += 1

# 打印字母数量,直接从字典里获取LETTERS的值,打印末尾以空格结束
print("LETTERS", d["LETTERS"], end=' ')
# 打印数字数量,直接从字典里获取DIGITS的值
print("DIGITS", d["DIGITS"])

第十四题:

第一种答案:

# 将用户输入的数据存储到字符串items里
items = input('请输入字符串:')
# 定义变量u、l,初始值为0,以备后面计数使用
u = 0
l = 0
# 遍历字符串items
for i in items:
    # 如果遍历到的字符串里的元素为大写,则变量u加1
    if i.isupper():
        u += 1
    # 如果遍历到的字符串里的元素为小写,则变量l加1
    elif i.islower():
        l += 1
# 打印计算结果
print('UPPER CASE %d LOWER CASE %d' % (u, l))

第二种答案:

# 将用户输入的数据存储到字符串items里
items = input('请输入字符串:')
# 创建字典d,用来存储后续大小写计数
d = {'UPPER': 0, 'LOWER': 0}
# 遍历字符串items
for i in items:
    # 如果遍历到的字符串里的元素为大写,则字典d里键为UPPER的值加1
    if i.isupper():
        d['UPPER'] += 1
    # 如果遍历到的字符串里的元素为小写,则字典d里键为LOWER的值加1
    elif i.islower():
        d['LOWER'] += 1
# 打印大小写字符的数量,直接从字典里获取对应的值
print('UPPER CASE %d LOWER CASE %d' % (d['UPPER'], d['LOWER']))

第十五题:

第一种答案:

# 获取用户输入,并转换为整型
num = int(input('请输入一个整数:'))
# 使用列表推导式生成从1到5(不包括5)的列表,元素转换成字符串类型
l = [str(i) for i in range(1, 5)]
# 遍历上面生成的字符串列表
for i, item in enumerate(l):
    # 将上述列表生成列表元素改成['1','11','111','1111']
    l[i] = '1' * (i + 1)
# 定义一个变量result,用来存储结果
result = 0

for i in l:
    # 遍历上述列表,并用用户输入的数字乘以上述列表元素(运算前先将元素转换为整型)
    result += num * int(i)
# 打印结果
print('计算结果为:', result)

第二种答案:

# 获取用户输入,并转换为整型
a = int(input("请输入一个数字:"))
# 定义整型变量n,初始值为0,用来存储中间列表元素
n = 0
# 定义整型result,用来存储最终计算结果
result = 0
# 定义空列表new_list[],用来存储目标列表里的各元素
new_list = []
# 遍历0到4(不包含4),每次运算用户输入的数字与10的i次幂的积,然后加上n,并赋值给新的n;然后添加到上述列表中
for i in range(0, 4):
    n += a * (10 ** i)
    new_list.append(n)
# 遍历上面生成的列表,每项相加,赋值给result
for i in new_list:
    result += i
# 打印result
print("计算结果为:", result)

第三种答案:

# 将用户输入的字符串转换为整型并赋值给变量a
a = int(input("请输入一个数字:"))
# 定义变量result,用来存储最终计算结果
result = 0
# 定义变量last,用来存储下面循环中每一步里的临时结果
last = 0
# 定义tmp用来存储下面循环中每一步的结果
tmp = 0
# 遍历从0到4(不包括4)
for i in range(0,4):
    # 用用户输入的数字乘以10的i次幂再加上上一步计算的结果
    tmp = a * (10**i) + last
    # 将此步计算的结果赋值给last
    last = tmp
    # 将此步计算的结果加上result,然后赋值给result
    result = result + tmp
# 打印结果
print("计算结果为:", result)

第十六题:

第一种答案:

# 输入一组数字,每个数字用逗号连接,输出相应的奇数list。假设输入:1,2,3,4,5,6,7,8,9,则输出:1,3,5,7,9
# 将用户输入的数字用逗号分割并转换为列表,存储在列表list1里
list1 = input('请输入一组数字,用逗号隔开:').split(',')
# 定义一个新列表new_list,用来存储符合条件的数字
new_list = []
# 遍历用户输入的数组,满足条件的数字添加到新列表new_list里
for i in list1:
    if int(i) % 2 == 1:
        new_list.append(i)
# 用逗号连接上面生成的新列表,并将列表转换为字符串并打印
print(','.join(new_list))

第二种答案:

# 将用户输入的数字用逗号分割并转换为列表,存储在列表a里
a = input("请输入一组数字:").split(",")
# 使用带有条件判断的列表推导式,生成符合条件的新列表b
b = [str(i) for i in a if int(i) % 2 != 0]
# 用逗号连接上面生成的新列表,并将列表转换为字符串并打印
print(",".join(b))

第十七题:

# 定义一个变量,用来存储剩余总金额,初始值为0
netAmount = 0
# 创建一个循环,用来判断用户输入是否结束
while True:
    # 将用户输入的数据存储在字符串s里
    s = input('请输入存取及金额,格式如D 100或W 100:')
    # 判断,如果字符串是否为空,如果为空,则跳出循环
    # 使用if  not x这种写法的前提是:必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行
    # 在python中None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False
    if not s:
        break
    # 将字符串s用空格分割,然后转换为列表并存储到values里
    values = s.split(" ")
    # 用变量operation来存储列表values的第一个元素,即D或W
    operation = values[0]
    # 用变量amount来存储列表values里的第二个元素,即用户输入的存取数值
    amount = int(values[1])
    # 判断,如果是存,即第一个元素为D时,则用之前的总金额加上现在的金额,然后把计算结果赋值给总金额
    if operation == "D":
        netAmount += amount
    # 判断,如果是取,即第二个元素为W时,则用之前的总金额减去现在的金额,然后把计算结果赋值给总金额
    elif operation == "W":
        netAmount -= amount
    # 如果出现其他情况,则直接忽略
    else:
        pass
# 打印总金额
print(netAmount)

第十八题:

# 导入正则表达式模块
import re
# 创建空列表value
value = []
# 将用户输入的密码用逗号分割,生成新地列表items,此处使用了列表推导式
items = [x for x in input('请输入密码并用逗号隔开:').split(',')]
# 遍历新列表items
for p in items:
    # 判断用户输入的密码长度,如果长度小于6或者大于12,则跳出本次循环,进入下一轮循环
    if len(p) < 6 or len(p) > 12:
        continue
    # 否则,不执行任何操作
    else:
        pass
    # 判断用户输入的密码内如果不包含字母a-z,则跳出循环,进入下一轮循环
    if not re.search("[a-z]", p):
        continue
    # 判断用户输入的密码内如果不包含字母0-9,则跳出循环,进入下一轮循环
    elif not re.search("[%d]", p):
        continue
    # 判断用户输入的密码内如果不包含字母A-Z,则跳出循环,进入下一轮循环
    elif not re.search("[A-Z]", p):
        continue
    # 判断用户输入的密码内如果不包含特殊字符$#@,则跳出循环,进入下一轮循环
    elif not re.search("[$#@]", p):
        continue
    # 判断用户输入的密码内如果包含空格或制表符,则跳出循环,进入下一轮循环
    elif re.search("\\s", p):
        continue
    # 否则,不执行任何操作
    else:
        pass
    # 将符合条件的密码添加到列表value里
    value.append(p)
# 将列表用逗号连接并生成字符串,然后打印
print(",".join(value))

第十九题:

# 导入operator模块里的itemgetter函数
from operator import itemgetter
# 创建空列表,准备存储用户输入的数据
datalist = []
# 打印提示输入内容
print('请输入名称、年龄、高度,并以逗号隔开:')
# 创建循环,判断输入是否结束
while True:
    # 用字符串变量tmp接收用户输入
    tmp = input()
    # 判断,如果字符串变量tmp为空,则结束输入循环
    if not tmp:
        break
    # 将用户输入用逗号分割并转换为列表,然后转换为元组,添加到datalist列表里
    datalist.append(tuple(tmp.split(',')))
# 将datalist列表排序,键值分别是元组里的第一个元素、第二个元素、第三个元素,然后打印
print(sorted(datalist, key = itemgetter(0, 1, 2)))

第二十题:

# 定义一个函数,因为这个函数含有yield,所以其实这个函数就是生成器(感兴趣的朋友可以使用type查看下这个函数的类型)
def putNumbers(n):
    # 定义一个整型数i,赋值0
    i = 0
    # 创建一个循环,当i小于n时循环执行
    while i < n:
        # 定义一个整形术j,赋值1
        j = i
        # i递增,等价于i += 1
        i = i + 1
        # 判断,如果i能被7整除,则返回j的值
        if j % 7 == 0:
            yield j


# 遍历生成器,传递参数为100
for i in putNumbers(100):
    # 打印生成器里的各个元素
    print(i)

"""注意:带yield的函数是生成器,不再是函数,这个生成器有一个函数就是next,next就相当于“下一步”生成哪个数,这次next开始执行的地方是从上一次next
停止的地方开始执行的,所以调用next的时候,生成器并不会从putNumbers函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出
要生成的数,此步就结束。"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值