Python学习——练习4

目录

1、将上节课的英雄商城、登录系统作业,使用函数封装重新完成

2、判断以下哪些不能作为标识符(BCDF)

3、输入数,判断这个数是否是质数(要求使用函数 + for循环)

4、求50~150之间的质数是那些?

5、打印输出标准水仙花数

6、验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除

7、 有一种最简真分数,它们的分子与分母的乘积都是140,把所有这样的真分数从小到大打印出来

8、某数被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1,求这个自然数

9、编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和

10、求1~100之间不能被3整除的数之和

11、给定一个正整数N,找出1到N(含)之间所有质数的总和

12、计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-.......)

13、给定一个10个元素的列表,请完成排序(注意,不要使用系统api)

14、求  a+aa+aaa+.......+aaaaaaaaa=?

15、合并两个有序数组,合并后还是有序列表

16、给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前

17、将10进制数据转换为二进制,并且统计其中的0和1的数量

18、给定一个数组[1,3,1,2,2,8,8],已知数组中的元素都是成对出现,现在数组中只有一个元素没有成对,请找出这个元素


1、将上节课的英雄商城、登录系统作业,使用函数封装重新完成

        1.英雄商城:

data = {}

def dljm():
    """
        英雄商城登录界面
    """
    print('\n\t\t   英雄联盟商城登录界面\n')
    print('~*'*28+'~\n')
    print('\t'*3+'1. 用户登录'+'\t'*3+'\n')
    print('\t'*3+'2. 新用户注册'+'\t'*3+'\n')
    print('\t'*3+'3. 退出系统'+'\t'*3+'\n')
    print('~*'*28+'~')
    infor1 = input('(温馨提示)请输入您的选项:')
    return infor1

def zc():
    """
        用户注册
    """
    global data
    username = input('注册-请创建用户名:')
    password = input('注册-请创建密码:')
    insure = input('注册-确认密码:')
    if insure == password:
        data[username] = password
        input('注册成功!(任意键继续)')
    else:
        input('密码确认有误!(任意键继续)')

def dl():
    """
        用户登录
    """
    username = input('登录-请输入用户名:')
    if username in data:
        password = input('登录-请输入密码:')
        for key in data:
            if data[key] == password:
                input('登录成功!(任意键继续)')
                login_flag = 1
                break
        else:
            input('密码错误!(任意键继续)')
    else:
        input('该用户名不存在!(任意键继续)')
    return login_flag

def scsy():
    """
        英雄商城首页
    """
    print('\n\n\t\t       英雄联盟商城首页\n')
    print('~*'*28+'~\n')
    print('\t'*3+'1. 进入英雄超市'+'\t'*3+'\n')
    print('\t'*3+'2. 休闲小游戏'+'\t'*3+'\n')
    print('\t'*3+'3. 退出登录'+'\t'*3+'\n')
    print('~*'*28+'~')
    infor2 = input('(温馨提示)请输入您的选项:')
    return infor2

def scsy_nothing():
    """
        商城首页的休闲小游戏功能未开放提示
    """
    input('该功能暂未开放!(任意键继续)')

def yxlb():
    """
        英雄商城英雄列表
    """
    print('\n\n\t\t       英雄商城英雄列表\n')
    print('~*'*28+'~\n')
    print('编号  姓名     昵称     价格  库存  描述\n')
    print('1     李青     盲僧     3000  100   一人之行可灭世,众人之勤可救世\n')
    print('2     锐雯   放逐之刃   4000    0   她是残忍高效的战士\n')
    print('3     薇恩   暗夜猎手   3500    0   这个世界不想人们想象的那么美好\n')
    print('4     扎克   生化魔人   3000    0   即使你没有脊柱,你也必须站起来\n')
    print('5     杰斯  未来守护者  2500    0   武装着睿智与魅力,你的选择没有错\n')
    print('~*'*28+'~')
    infor3 = input('(温馨提示-按任意键返回上一级菜单)请输入您要购买的英雄编号:')
    return infor3

def yxlb_nothing():
    """
        英雄列表的无库存提示
    """
    input('抱歉,该英雄暂无库存!(任意键继续)')

def yxsc():
    """
        英雄详情购买页面
    """
    print('\n\n\t\t\t\t英雄商城购买英雄\n')
    print('英雄购买票据')
    print('~*'*38+'~')
    print()
    print('\t英雄名称:盲僧(史诗)')
    print('\t英雄属性:生命值428(+85)/能量值200(+0)/移动速度425/攻击力55.8(+3.2)\n\t\t  攻击速度0.651(+3.1%)/护甲值24(+1.25)/攻击距离125')
    print()
    print('\t英雄座右铭:一人之行可灭世,众人之勤可救世!')
    print('\t英雄价格:3000')
    print('\t活动折扣;9.5')
    print()
    print('插播广告:当风云变色,当流离失所,世界不再是旧日模样\n'+'你是否会为了自己的梦想战斗,直至力战身亡,直至彼岸他乡\n')
    print('~*'*38+'~')
    n = int(input(f'折后商品价格为 {3000*9.5} 元,请输入购买数量:'))
    return n

def yxsc_fk(n):
    """
        英雄商城的付款提示
    """
    money = float(input(f'(温馨提示)您将购买 {n} 个商品,共计 {3000*9.5*n} 元,请付款:'))
    return money

def yxsc_not_enough():
    """
        英雄商城的余额不足提示
    """
    input('余额不足,请重新付款!(任意键继续)')

def yxsc_success():
    """
        英雄商城的付款成功提示
    """
    input('付款成功!下面是您的购买小票(任意键继续):')

def gmpj(n,money):
    """
        订单页面:打印小票
    """
    print('\n\n\t\t\t\t英雄商城购买英雄\n')
    print('英雄购买票据')
    print('~*'*38+'~')
    print()
    print('\t英雄名称:盲僧(史诗)')
    print('\t英雄价格:3000')
    print('\t活动折扣;9.5')
    print(f'\t购买数量:{n}')
    print()
    print(f'\t应付付款:{3000*9.5*n}')
    print(f'\t实际付款:{money}')
    print(f'\t找零:{money - 3000*9.5*n}')
    print()
    print('插播广告:当风云变色,当流离失所,世界不再是旧日模样\n'+'你是否会为了自己的梦想战斗,直至力战身亡,直至彼岸他乡\n')
    print('~*'*38+'~')
    input('(温馨提示)按任意键返回上一级菜单:')

def cuowu():
    """
        当用户输入错误命令时的提示
    """
    input('命令错误,请重新输入!(任意键继续)')

while True:
    login_flag = 0
# 1.英雄商城登录界面
    infor1 = dljm()
    # 用户注册
    if infor1 == '2':
        zc()
    # 用户登录
    elif infor1 == '1':
        login_flag = dl()
    # 退出系统
    elif infor1 == '3':
        break
    else:
        cuowu()

# 2.英雄商城首页
    if login_flag == 1:
        while True:
            infor2 = scsy()
            if infor2 == '2':
                scsy_nothing()
            elif infor2 == '3':
                break
            elif infor2 == '1':
            
# 3.英雄商城英雄列表 
                while True:
                    infor3 = yxlb()
                    if infor3 == '2' or infor3 == '3' or infor3 == '4' or infor3 == '5':
                        yxlb_nothing()
                    elif infor3 == '1':
                    
# 4.英雄详情购买页面
                        while True:
                            n = yxsc()
                            money = yxsc_fk(n)
                            if money < 3000*9.5*n:
                                yxsc_not_enough()
                            else:
                                yxsc_success()
                                
# 5.订单页面:打印小票    
                                gmpj(n,money)
                                break
                    else:
                        break
            else:
                cuowu()

        2.系统登录:

data = {}

def dlzc():
    """
        登录注册界面
    """
    infor = input('请输入您要进行的操作(1.注册 2.登录 3.退出):')
    return infor

def zc():
    """
        用户注册
    """
    global data
    username = input('注册-请创建用户名:')
    password = input('注册-请创建密码:')
    insure = input('注册-确认密码:')
    if insure == password:
        data[username] = password
        print('注册成功!')
    else:
        print('密码确认有误!请重新输入')

def dl():
    """
        用户登录
    """
    username = input('登录-请输入用户名:')
    if username in data:
        password = input('登录-请输入密码:')
        for key in data:
            if data[key] == password:
                print('登录成功!')
                break
        else:
            print('密码错误!')
    else:
        print('该用户名不存在!')

def cuowu():
    """
        当用户输入错误命令时的提示
    """
    print('命令错误,请重新输入!(任意键继续)')

while True:
    infor = dlzc()
    if infor == '1':
        zc()
    elif infor == '2':
        dl()
    elif infor == '3':
        break
    else:
        cuowu()

2、判断以下哪些不能作为标识符(BCDF)

A、a            B、¥a            C、_12            D、$a@12              E、false             F、False


3、输入数,判断这个数是否是质数(要求使用函数 + for循环)

def isPrime(x):
    """
    判断是否为质数
    """
    if x == 1:
        return False
    for i in range(2,x//2 + 1):
        if x % i == 0:
            return False
    return True

x = int(input('请输入一个正整数:'))
if isPrime(x):
    print(f'{x}是质数')
else:
    print(f'{x}不是质数')

结果:


4、求50~150之间的质数是那些?

def isPrime(x):
    """
    判断是否为质数
    """
    if x == 1:
        return False
    for i in range(2,x//2 + 1):
        if x % i == 0:
            return False
    return True

print('50-150的所有质数有:')
for x in range(50,151):
    if isPrime(x):
        print(x,end = '  ')

结果:


5、打印输出标准水仙花数

        描述:水仙花数是指一个三位数,它的每个位上的数字的三次幂之和等于它本身

        示例:1^3+5^3+3^3 = 153

def isSXH(x):
    '''
    判断是否为水仙花数
    '''
    if (x//100)**3 + (x%100//10)**3 + (x%10)**3 == x:
        return True

print('水仙花数共有:')
for x in range(100,1000):
    if isSXH(x):
        print(x,end='  ')

结果:


6、验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除

def iszhengchu9(x):
    '''
    验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除
    '''
    sum_x = 0
    ls = list(str(x))
    for i in ls:
        num = int(i)
        sum_x += num
    if x > 9 and (x - sum_x)%9 == 0:
        return True
    else:
        return False

x = int(input('请输入任意大于9的整数以验证:'))
if iszhengchu9(x):
    print(f'{x}验证成功')
else:
    print(f'{x}验证失败')

结果:


7、 有一种最简真分数,它们的分子与分母的乘积都是140,把所有这样的真分数从小到大打印出来

def iszjzfs(nume,deno):
    '''
    判断是否为最简真分数
    '''
    a = abs(nume)
    b = abs(deno)
    c = 0
    if a < b and b != 0:
        while  b % a != 0:
            c = b % a
            b = a
            a = c
        if c == 1 or a == 1:
            return True

print('分子与分母的乘积都是140的最简真分数有(从小到大排序):')
for deno in range(140,0,-1):
    for nume in range(1,deno):
        if nume * deno == 140 and iszjzfs(nume,deno):
            print(f'{nume}/{deno}',end="  ")

结果:


8、某数被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1,求这个自然数

def onenum():
    '''
    求自然数:被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1
    '''
    num = 0
    while True:
        x = num // 80
        if x % 7 == 0 and x % 2 == 1 and x % 3 == 1 and x % 4 == 1 and x % 5 == 1 and x % 6 == 1:
            return num
        num += 1

x = onenum()
print(f'所求自然数为:{x}')

结果:


9、编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和

def the_num(num):
    '''
    判断数:它除以11所得的商是否等于它各位数字之和
    '''
    a = num // 11
    b = num//100 + num%100//10 + num%10
    if a == b:
        return True

print('所求三位数有:')
for num in range(100,1000):
    if the_num(num):
        print(num,end="  ")

结果:


10、求1~100之间不能被3整除的数之和

def func(num):
    '''
    求不能被3整除的数
    '''
    if num % 3 == 0:
        return False
    else:
        return True

sum_x = 0
for x in range(1,101):
    if func(x):
        sum_x += x
print(f'1~100之间不能被3整除的数之和为:{sum_x}')

结果:


11、给定一个正整数N,找出1到N(含)之间所有质数的总和

def isPrime(x):
    """
    判断是否为质数
    """
    if x == 1:
        return False
    for i in range(2,x//2 + 1):
        if x % i == 0:
            return False
    return True

N = int(input('请输入一个正整数N:'))
sum_Prime = 0
for x in range(1,N+1):
    if isPrime(x):
        sum_Prime += x
print(f'1到N(含)之间所有质数的总和为:{sum_Prime}')

结果:


12、计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-.......)

def PI():
    '''
    计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-.......)
    '''
    n = 0
    sum_PI = 0
    for i in range(1,10000,2):
        sum_PI += ((-1)**n)*(1/i)
        n += 1
    PI = 4*sum_PI
    return PI

print(f'PI = {PI()}')

结果:


13、给定一个10个元素的列表,请完成排序(注意,不要使用系统api)

def selection_sort(ls=[]):
    '''
    选择排序法
    '''
    for i in range(len(ls)):
        index_min = i
        for j in range(i+1,len(ls)):
            if ls[index_min] > ls[j]:
                index_min = j
        ls[index_min],ls[i] = ls[i],ls[index_min]
    return ls

ls = [23,5,12,67,64,87,3,1,2,28]
print(f'原列表为:{ls}')
print(f'选择排序法排序后的列表为:{selection_sort(ls)}')

结果:


14、求  a+aa+aaa+.......+aaaaaaaaa=?

其中a为1至9之中的一个数,项数也要可以指定

def one_sum(a,n):
    '''
    求 a + aa + aaa +.......+ aaaaaaaaa = ? (其中a为1至9之中的一个数,项数可以指定)
    '''
    sum_a = 0
    for i in range(1,n+1):
        num = int(f'{a}'*i)
        sum_a += num
    return sum_a

a = int(input('请输入一个在区间[1,9]的正整数:'))
n = int(input('请输入指定的项数:'))
print(f'所求多项式的和为:{one_sum(a,n)}')

结果:


15、合并两个有序数组,合并后还是有序列表

def selection_sort(ls=[]):
    '''
    选择排序法
    '''
    for i in range(len(ls)):
        index_min = i
        for j in range(i+1,len(ls)):
            if ls[index_min] > ls[j]:
                index_min = j
        ls[index_min],ls[i] = ls[i],ls[index_min]
    return ls

ls_1 = [1,3,5,7,9]
ls_2 = [2,4,6,8,10]
print(f'原有序列表1为:{ls_1}')
print(f'原有序列表2为:{ls_2}')
ls_1.extend(ls_2)
print(f'合并后的有序列表为:{selection_sort(ls_1)}')

结果:


16、给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前

def even_before_odd(ls = []):
    '''
    将一个非负整数数组中的所有偶数都放在奇数元素之前
    '''
    for i in range(len(ls)):
        if ls[i] % 2 != 0:
            for j in range(i+1,len(ls)):
                if ls[j] % 2 == 0:
                    ls[i],ls[j] = ls[j],ls[i]
                    break
    return ls

ls = [1,2,3,4,5,6,7,8,9]
print(f'原列表为:{ls}')
print(f'将偶数置于奇数前,列表变为:{even_before_odd(ls)}')

结果:


17、将10进制数据转换为二进制,并且统计其中的0和1的数量

def ten_to_two(num):
    '''
    将十进制数据转换为二进制,并且统计其中的0和1的数量
    '''
    binary_num = bin(num)
    ls = list(str(binary_num))[2:]
    count_0 = 0
    count_1 = 0
    for i in ls:
        if int(i) == 0:
            count_0 += 1
        else:
            count_1 += 1
    return count_0,count_1

num = int(input('请输入一个整数:'))
print(f'将{num}转换为二进制为:{bin(num)[2:]}')
print(f'其中0的数量为:{ten_to_two(num)[0]}个')
print(f'其中1的数量为:{ten_to_two(num)[1]}个')

结果:


18、给定一个数组[1,3,1,2,2,8,8],已知数组中的元素都是成对出现,现在数组中只有一个元素没有成对,请找出这个元素

def notpair(ls):
    '''
    找出不成对的元素
    '''
	temp = 0
	for i in ls:	
		temp ^= i
	return temp

ls = [1,3,1,2,2,8,8]
print(f'{ls}中不成对的元素为:{notpair(ls)}')

结果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

俗人不俗鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值