python实战练习题二

"""
第一题:求解回文字符串
回文是一个正读和反读都一样的字符串。
例如:abcba 12321 是回文字符串 hello 123456 不是回文字符串
"""
s = input("请输入字符串:")
s2 = s[::-1]        # 字符串逆序
if s == s2:
    print("{} 是回文字符串!".format(s))
else:
    print("{} 不是回文字符串!".format(s))

 

"""
第二题:猜数字小游戏
需求分析:
随机生成一个 100 以内的整数,共有 10 次机会开始游戏,输入猜测的数字。
如果猜小了,则提示:猜小了
如果猜大了,则提示:猜大了
猜对了,则提示:猜对了,并且结束游戏
10 次机会用完还没猜对,提示:游戏结束,没有猜到。
"""
import random

number = random.randint(1, 100)
print("系统生成的随机数:", number)
for i in range(10):
    choice = int(input("请输入你要猜测的数字:"))
    if choice > number:
        print("猜大了!")
    elif choice < number:
        print("猜小了!")
    else:
        print("猜对了,真棒!")
        break
    print(f'还剩{9 - i}次机会!')
else: # 这种情况:else 和 for 循环对齐,只有 for 循环全部执行完,没有出现任何 break 情况时,才会执行 else 语句
    print('游戏结束,你没有猜到!')

 

"""
第三题:数字组合
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
"""
num = 0
for a in range(1, 5):           # 遍历第一个数
    for b in range(1, 5):       # 遍历第二个输
        for c in range(1, 5):   # 遍历第三个数
            if ((a != b) and (a != c) and (b != c)):    # 每一个数不能想通
                print(a, b, c)
                num += 1
print("1,2,3,4 组成互不相同且无重复数字的三位数总量:", num)

 

"""
第四题:输出九九乘法表
程序分析 分行与列考虑,共9行9列,i控制行,j控制列。
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
"""
for i in range(1, 10):
    for j in range(1, i + 1):
        print('%d*%d=%d' % (i, j, i * j), end=" ")
    print()

 

"""
第五题:求解 1000 以内的所有完数
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析 将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。
"""
# 定义一个函数:求解一个数的所有因数的函数
def factor(num):
    result = set()
    for i in range(1, num // 2 + 1):        # 只需计算到这个数的一半即可
        if num % i == 0:
            result.add(i)
    return result

print("2 ~ 1000 之间的所有完数为:", end=" ")
for data in range(2, 1001):
    if data == sum(factor(data)):
        print(data, end=" ")

 

"""
第六题:阶乘求和
求1+2!+3!+…+10!的和。
"""
def fac(num):
    result = 1
    for i in range(1, num + 1):
        result = result * i
    return result

sumValue = 0
for i in range(1, 10):
    sumValue = sumValue + fac(i)
print("1+2!+3!+…+10!的和为:", sumValue)

 

"""
第七题:找出两个列表 lst1 lst2 共同存在的元素
例如:lst1 = [1, 2, 3, 4, 5, 5] lst2 = [2, 5, 6, 8, 9]
输出:共同的元素为:{2, 5}
"""
lst1 = [1, 2, 3, 4, 5, 5]
lst2 = [2, 5, 6, 8, 9]
result = set()      # 有可能会存在重复的元素,需要去重
for i in lst1:
    count = lst2.count(i)
    if count > 0:
        result.add(i)
print("两个集合的共同元素为:", result)

"""
第八题:计算两个元祖去重后的元素,以及元素的个数
例如:s1 = (1, 2, 3, 4, 5, 5) s2 = (2, 5, 6, 7, 8)
输出:去重后的元素为:{1, 2, 3, 4, 5, 6, 7, 8} 个数为:8
"""
s1 = (1, 2, 3, 4, 5, 5)
s2 = (2, 5, 6, 7, 8)
result = set(s1)        # 元祖1 直接强制类型转换为集合 result
for i in s2:
    result.add(i)
print("去重后的元素为:{},个数为:{}".format(result, len(result)))

 

"""
第九题:字符串处理成字典类型
将字符串:"k:1|k1:2|k2:3|k3:4",处理成 python 字典:{'k':'1', 'k1':'2', 'k2':'3','k3':'4' }
"""
str1 = "k:1|k1:2|k2:3|k3:4"
str_list = str1.split('|')
d = {}
for l in str_list:
    key, value = l.split(':')
    d[key] = value
print("处理之后的字典为:", d)

 

"""
第十题:自定义函数,实现 len() 统计集合的元素个数
集合有可能为:字符串,列表,元祖,字典,集合等
"""
# 定义等同于 len() 功能的函数,求解集合的长度
def lenFun(data):
    result = 0
    if isinstance(data, str):
        for i in data:
            result = result + 1
    elif isinstance(data, list):
        for i in data:
            result = result + 1
    elif isinstance(data, tuple):
        for i in data:
            result = result + 1
    elif isinstance(data, set):
        for i in data:
            result = result + 1
    elif isinstance(data, dict):
        for key in data.keys():
            result = result + 1
    else:
        print("输入的数据有误,不能统计数据的长度!")
        result = -1
    return result


print(lenFun("123456"))  # 6
print(lenFun([1, 2, 3, 4, 5]))  # 5
print(lenFun((1, 2, 3, 4, 5)))  # 5
print(lenFun({1, 2, 3, 4, 5, 6}))  # 6
print(lenFun({"name": "大超", "age": 28, "hoppy": ["打羽毛球", "跑步"]}))  # 3

 





posted @ 2024-05-06 16:11  菜鸟的奋斗之路  阅读(43)  评论(0编辑  收藏  举报