【python】循环与判断练习题

  • 题目01: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
    grade = {'小张':99,'小李':88,'小明':66,'小赵':55}
    for name in grade:
        if grade[name]>=90:
            print('%s成绩为A'%name)
        elif grade[name]>=60:
            print('%s成绩为B' % name)
        else:
            print('%s成绩为C' % name)

    输入一个姓名,查询该同学的分值和成绩等级
    for i in range(9999):  #可最多循环9999次
        name = input('请输入要查询的同学')
        if name in grade: #如果人名存在
            if grade[name]>=90:
                print('%s分数为%s,成绩等级为为A'%(name,grade[name]))
            elif grade[name]>=60:
                print('%s分数为%s,成绩等级为为B' % (name, grade[name]))
            else:
                print('%s分数为%s,成绩等级为为C' % (name, grade[name]))
        else:#如果人名不存在
            print('查询错误')
  • 题目02: 猜拳游戏 random.randint(x,y) 返回 x 到 y 之间的随机数
import random #随机数模块
print(random.randint(0,2))

#实现三局两胜
import random
computer_win = 0  #电脑赢得次数
user_win = 0  #玩家赢得次数
info = ['石头','剪刀','布']
for i in range(999):
    computer = random.randint(0,2)
    user = int(input('请输入 0>石头 1>剪刀 2>布'))
    if 2>=user>=0:
        # if (info[computer]=='石头' and info[user] =='剪刀') or (info[computer]=='剪刀' and info[user] =='布') or (info[computer]=='布' and info[user] =='石头'):
        #     print('电脑出了%s,玩家出了%s,电脑胜利'%(info[computer],info[user]))
        if user-computer==1  or user-computer==-2:
            print('电脑出了%s,玩家出了%s,电脑胜利' % (info[computer], info[user]))
            computer_win+=1
        elif computer == user:
            print('电脑出了%s,玩家出了%s,平局' % (info[computer], info[user]))
        else:
            print('电脑出了%s,玩家出了%s,玩家胜利' % (info[computer], info[user]))
            user_win+=1
    else:
        print('请按提示输入范围内的数字')

    if computer_win>=2:
        print('电脑获得最终胜利')
        break  #直接跳出循环
    if user_win>=2:
        print('玩家获得最终胜利')
        break  # 直接跳出循环
  • 题目03: 打印9*9乘法表

    for i in range(1,10):
        for j in range(1,i+1):
            print('%s*%s=%-2s'%(j,i,i*j),end=' ')
        print()
    
    
  • 题目04: 3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?

    n = 3000
    t = 0
    while n>=5:  #循环条件
        n/=2
        t+=1
    print(t)
    
    
  • 题目05: 计算从1到某个值以内所有能被3或者17整除的数的和并输出

    list1 = []
    num = int(input('请输入大于1的整数'))
    for i in range(1,num):
        if i%3==0 or i%17==0:
            list1.append(i)
    print(list1)
    print(sum(list1)) #对列表进行求和,每个元素都必须是number
    
  • 题目06: 随意输入一个整数,判断是否是素数(质数).

    n = int( input('请输入一个大于1的整数'))
    for i in range(2,n//2+1):  #可减少一半不必要的循环次数
        if n%i==0:
            其中一个能被整除 就不是素数
            print('%s不是素数'%n)
            break
    else:   #正常全部走完,没有触发break 那才能说明他是素数
        print('%s是素数' % n)
    
  • 题目07: 创建一个名为favorite_places的字典。在这个字典中,将三个人的名字用作键;对于其中的每个人,都存储他喜欢的1〜3个地方(作为值). 朋友指出他们喜欢的一个地方(input)。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来

    favorite_places = {'a1':['上海','北京','广州'],'a2':['上海','北京','厦门'],'a3':['上海','重庆','厦门']}
    place = input('请输入一个地名')
    flag = False  #开关(关)
    for k,v in favorite_places.items():
        if place in v:
            print('%s喜欢%s'%(k,place))
            flag = True  #改变状态(开)
    
    if not flag:
        print('没人喜欢这个地方')
    
  • 题目08: 输出一个用*组成的矩形,如:

    ​ * * * * * * * * *

    ​ * *

    ​ * *

    ​ * *

    ​ * * * * * * * * *

    # 方法一
    for i in range(5):
        for j in range(5):
            if 0<i<4 and 0<j<4:
                print(' ',end='')
            else:
                print('*',end='')
        print()
    
    # 方法二
    for i in range(5):
        if 0<i<4:
            print('*'+' '*3+'*')
        else:
            print('*'*5)
    
  • 题目09 : 循环问“老婆,你爱我吗?”,如果回答的是“爱”,那么就结束循环,否则就继续问。用程序描述这个故事

    方式一
    flag = False
    for i in range(3):
        q = input('老婆,你爱我吗?')
        if q=='爱':
            flag = True
            print('老婆我也爱你')
            break
        else:
            print('在给你一次机会')
    
    if not flag:
        print('对不起打扰了')
    
    方式二  利用与for 对应的else关键字效果
    for i in range(3):
        q = input('老婆,你爱我吗?')
        if q=='爱':
            print('老婆我也爱你')
            break
        else:
            print('在给你一次机会')
    else:  #只要break触发,它就不触发;反之,触发
        print('对不起打扰了')
    
  • 题目10: 将一个正整数分解质因数。例如:输入90,打印出90=233*5。

    n = int(input('请输入一个大于1的整数'))
    m = n  #设置一个相同的不变的数值,后期显示有用
    li = [] #存放质因数
    for i in range(2,n//2+1):
        while True: #循环循环,确保当前的数字不能再被使用了才跳出,继续下一个数字
            if n%i==0:
                n//=i  #确认一个数字,需要相对应的减小
                li.append(str(i))
            else:
                break
    if len(li)==0:   #稍作处理
        print('%s=%s' % (m,'1*'+str(m)))
    else:
        print('%s=%s'%(m,'*'.join(li)))
    
  • **题目11:**L = [75, 98, 59, 81, 66, 43, 69, 85]
    现在老师只想统计及格分数的平均分,就要把 x < 60 的分数剔除掉

    L = [75,98,59,81,66,43,69,86]
    l = [] #及格的分数
    for i in L:
        if i<60:
            continue
        l.append(i)
    print(l)
    print('总分为%s,及格的平均分为%s'%(sum(l),round(sum(l)/len(l),2)))
    
  • **题目12:**0 - 100 的while循环进行改造,通过增加 continue 语句,使得只计算奇数的和

    sum_num = 0
    for i in range(101):
        if i%2==0:
            continue
        sum_num+=i
    print(sum_num)
    
  • **题目13:**利用 while True 无限循环配合
    break 语句,计算 1 + 2 + 4 + 8 + 16 + … 的前20项的和

    li = [1]
    for i in li:
        li.append(i*2)
        if len(li)==20:
            s = sum(li)
            break
    print(s)
    
  • 题目14: names = [‘Tom’,‘Billy’,‘Jefferson’,‘Andrew’,‘Wesley’,‘Steven’,‘Joe’,
    ‘Alice’,‘Jill’,‘Ana’,‘Wendy’,‘Jennifer’,‘Sherry’,‘Eva’]

    找出上述名字中长度大于4的名字,组成列表打印出来.

    过滤掉长度小于5的字符串列表,并将剩下的转换成大写字母.

    names = ['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe','Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']
    li = [i.upper() for i in names if 4<len(i)<6]
    print(li)
    
    
  • 题目15: 对列表中为偶数的元素进行立方运算 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  • 题目16: 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

    例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

  • 题目17: 打印出如下图案(菱形)

  • 题目18: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。(用列表推导式)

    list3 = []
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                if i!=j and j!=k and i!=k:
                    # list3.append(i*100+j*10+k)
                    list3.append(int(str(i)+str(j)+str(j)))
    print(list3)
    print(len(list3))
    
    for i in range(10):
        for j in range(10):
            if i==5 and j==5:
                # break  #跳出当前这一层循环,无法直接跳出多重循环
                continue  #跳过当前小循环,进入下一个元素
            print(i,j)
        if i==5 and j==5:
            break
    
  • 题目19: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同

  • 题目20: 使用Python编程,求1~100间所有偶数的和。

    list2 = []
    for i in range(2,101,2):  #(开始,结束,步长)
        list2.append(i)
    print(sum(list2))
    
  • 题目21: 输出1到100之间所有的质数

    list1 = []
    for i in range(2,101):
        for j in range(2,i):
            if i%j==0:
                print('%s不是质数'%i)
                break
        else:
            print('%s是质数' % i)
            list1.append(i)
    print(list1)
    
  • 题目22: 从键盘输入一个字符串,将字符串以列表的形式输出(如果字符串包含整数,转为整型)?

    def get_list(str1):
        li = []
        n = ''  #临时保存数字
        for i in str1:
            if i.isdigit():
                n+=i
            else: #当不是数字的时候
                if n!='':
                    li.append(int(n)) #追加
                    n = '' #重置为空,避免对下一次产生干扰
                li.append(i)
    
        if n!='':  #最后判断是否还有数字没追加进列表
            li.append(int(n))
        print(li)
    
    for i in range(10):
        str1 = input('请输入一段字符')
        get_list(str1)  #调用功能函数
    
  • 题目23: 约瑟夫环
    (1)一群人围在一起坐成环状(如:N)
    (2)从某个编号开始报数(如:K)
    (3)数到某数(如:M)的时候,此人出列,下一个人重新报数
    (4)一直循环,直到剩余2个人,约瑟夫环结束

    def ysfh(people,start,number):
        n = 0
        li = [i for i in range(people)]  #创建列表
        while len(li)>2:
            n+=1
            start = (start+number-1)%len(li)
            del_num = li.pop(start)
            print('第%s次删除:下标为%s的元素%s被删除剩下的列表为%s'%(n,start,del_num,li))
        return li
    
    if __name__=='__main__':
        people = int(input('请输入人数'))
        start  = int(input('请输入开始的位置(从0开始)'))
        number = int(input('请输入要数的数字'))
        r = ysfh(people,start,number)
        print(r)
    
  • 题目24: 假设设一个简单的ATM机的取款过程是这样的:
    首先提示用户输入密码(password),最多只能输入3次,超过3次见提示用户"密码错误,请取卡”
    结束交易。如果用户密码码正确,再提示用户输入金额(amount).ATM机只能输出100元的纸币,
    一次取钱数要求最低0元,最高1000元。如果用户输入的金额符合上述要求。则打印出用户取的
    钱数。最后提示用户“交易完成,请取卡”,否则提示用户重新输入金额。假设用户密码是“888888”.(不需要函数来做,先写正面条件)

    info = {
        '001':{
            'user_name':'a',
            'pd':'111111',
            'moner':1000
        },
        '002':{
                'user_name':'b',
                'pd':'222222',
                'moner':2000
            }
    }
    
    #登录
    def login():
        for i in range(3): #三次机会
            k = input('请输入卡号')
            if k in info:  #卡号存在,则输入密码
                for i in range(3):  #三次机会
                    pd = input('请输入密码')
                    if pd==info[k]['pd']: #密码验证成功
                        print('登录成功')
                        return True
                    else:
                        print('密码错误,请重新输入')
                else:
                    # print('三次机会用完,最终登录失败')
                    return False
            else:
                print('账目不存在,请重新输入')
        else:
            # print('三次机会用完,最终登录失败')
            return False
    
    # 取款
    
    def get_money():
        print('我要取款')
    #存款
    def save_money():
        print('我要存款')
    #转账
    def change_money():
        print('我要转账')
    
    # 登录操作
    
    r = login()
    if r:#登录成功
        se = input('请选择业务 1》取款 2》存款 3》转账')
        if se=='1':
            get_money()
        elif se=='2':
            save_money()
        elif se=='3':
            change_money()
        else:
            print('请选择正确的业务')
    else:
        print('三次机会用尽,登录失败')
    
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值