【python】循环与判断练习题

    科技2022-07-10  184

    题目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('三次机会用尽,登录失败')
    Processed: 0.033, SQL: 8