【python基础语法】国庆扩展练习题
''' 一、国庆知识小拓展 1、 用户登陆程序需求: 1. 输入用户名和密码; 2. 判断用户名和密码是否正确? (name='root', password='123') 3. 为了防止暴力破解, 登陆仅有三次机会, 如果超过三次机会, 提示错误次数过多,账号已被冻结; 2、给定一个句子(只包含字母和空格), 将句子中的单词位置反转 比如: “hello xiao mi” > “mi xiao hello” 3、运行程序,提示用户依次输入三个整数x,y,z,请把判断三个数的大小,然后由小到大打印输出到控制台。 4、 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多 少米?第10次反弹多高? 5、题目:猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃 了一个。以后每天早上都吃了前一天剩下的一半 在加一个。到第10天早上想再吃时,见只剩下一个桃子了。 请通过一段通过代码来计算第一条摘了多少个桃子? 6、题目:输入某年某月某日,判断这一天是这一年的第几天? 7、小明有100块钱 ,准备买100本书,a类数5元一本,b类书3元一本,c类书 1元2本。请计算小明有多少种购买的 方式? 8、题目:企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时,高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 9、编写一个自动售货机,运行功能如下: 1、请按下面提示,选择购买的商品 1). 可乐 2.5元 2). 雪碧 2.5元 3). 哇哈哈 3元 4). 红牛 6元 5). 脉动 4元 6). 果粒橙 3.5元 2、提示用户投币(支持1元,5元,10元) 用户输入投币金额, 用户投币金额不够商品价格,继续提示投币, 当投币超过商品价格,则返回商品和找零,然后结束程序 ''' """ 第一题:用户登陆程序需求: 1. 输入用户名和密码; 2. 判断用户名和密码是否正确? (name='root', password='123') 3. 为了防止暴力破解, 登陆仅有三次机会, 如果超过三次机会, 提示错误次数过多,账号已被冻结; """ # 方式一 def user_login(): i = 0 while True: user_name = input("请输入用户名:") password = input("请输入密码:") user_storage = {"name": "root", "password": "123"} if i < 3: if user_name == user_storage["name"] and password == user_storage["password"]: print("登录成功!") break else: i += 1 print("您输入的账号或密码错误,请重新输入!") else: print("错误次数过多,账号已被冻结") user_login() # 方式二 def user_login(): for i in range(1,4): user_name = input("请输入用户名:") pass_word = input("请输入密码:") if user_name == 'root' and pass_word == "123": print("登录成功!") break else: print("您输入的账号或者密码有误,您还有{}次输入计会".format(3-i)) else: print('今日的三次机会已用完,错误次数过多,账号已被冻结') user_login() """ 第二题: 给定一个句子(只包含字母和空格)将句子中的单词位置反转, 比如: “hello xiao mi”> “mi xiao hello” """ def String_inversion(): str = "hello xiao mi" # 字符串转换为列表,以空格作为分隔符 list = str.split(" ") # 列表元素反转,不用 list.reverse() # 将列表重新拼接为字符串 str1 = " ".join(list) print(str1) String_inversion() """ 第三题: 运行程序,提示用户依次输入三个整数x,y,z,请把判断三个数的大小 ,然后由小到大打印输出到控制台。 """ def number_sort(): x = int(input("请输入第一个整数:")) y = int(input("请输入第二个整数:")) z = int(input("请输入第三个整数:")) li = [x,y,z] li.sort() for num in li: print(num) number_sort() """ 第四题: 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? """ # 方法一: def sum_high(): # 记录次数 i = 0 # 定义总距离 sum_high = 0 # 第一次下落高度 high = 100 while True: if i < 11: # 落下的距离 + 反弹的距离 + 经过的距离 sum_high = sum_high + high + high/2 # 反弹的距离 high = high/2 i += 1 else: print("共经过{}米".format(sum_high - high)) print("第10次反弹{}米".format(high)) break sum_high() # 方法二: def sum_high(): # 定义总距离 sum_high = 0 # 第一次下落高度 high = 100 for i in range(10): sum_high = sum_high + high + high/2 high = high/2 print("共经过{}米".format(sum_high - high)) print("第10次反弹{}米".format(high)) sum_high() """ 第五题: 题目:猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,多吃了一个。 以后每天早上都吃了前一天剩下的一半 在加一个。 到第10天早上想再吃时,见只剩下一个桃子了。 请通过一段通过代码来计算第一条摘了多少个桃子? """ def Peach_quantity(): sum = 1 for i in range(10): print("第{}天的桃子数量:{}".format(10 - i, sum)) sum = (sum + 1)*2 Peach_quantity() """ 第六题 题目:输入某年某月某日,判断这一天是这一年的第几天? """ def work6(): str1 = input("请输入年月日:例 2019-9-29:") # 获取年月日,转换位数值类型 year, month, day = str1.split('-') year = int(year) month = int(month) day = int(day) # 公历闰年判定遵循的规律为:四年一闰、百年不闰、400年再闰 # 判断是否位闰年(公历闰年的计算方法:普通年能被四整除且不能被100整除的为闰年) if (year % 100 == 0 and year % 400 == 0) or (year % 100 != 0 and year % 4 == 0): # 正常的年份 r_days = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335] data = r_days[month - 1] + day else: days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] data = days[month- 1] + day print('这个{}年的第{}天'.format(year,data)) work6() """ # 第七题 7、小明有100块钱 ,准备买100本书, a类数5元一本,b类书3元一本,c类书 1元2本。 请计算小明有多少种购买的方式? """ def work7(): count = 0 for a in range(100 // 5 + 1): for b in range(100 // 3 +1): if a * 5 + b * 3 + (100 - a - b) * 0.5 <= 100: count += 1 print(count) work7() """ # 第八题 8、题目:企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时,高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成, 从键盘输入当月利润I,求应发放奖金总数? """ def work8(): i = int(input("请输入当月利润:")) if i <= 10: salary = i * 0.1 print("应发放奖金总数为:{}万".format(salary)) elif i <= 20 and i > 10: salary = 10 * 0.1 + (i-10)*0.075 print("应发放奖金总数为:{}万".format(salary)) elif i <= 40 and i > 20: salary = 10 * 0.1 + 10 * 0.075 + (i - 20) * 0.05 print("应发放奖金总数为:{}万".format(salary)) elif i <= 60 and i > 40: salary = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (i - 40) * 0.03 print("应发放奖金总数为:{}万".format(salary)) elif i <= 100 and i > 60: salary = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (i - 60) * 0.015 print("应发放奖金总数为:{}万".format(salary)) else: salary = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (i - 100) * 0.01 print("应发放奖金总数为:{}万".format(salary)) work8() """ # 第九题: 编写一个自动售货机,运行功能如下: 1、请按下面提示,选择购买的商品 1). 可乐 2.5元 2). 雪碧 2.5元 3). 哇哈哈 3元 4). 红牛 6元 5). 脉动 4元 6). 果粒橙 3.5元 2、提示用户投币(支持1元,5元,10元) 用户输入投币金额, 用户投币金额不够商品价格,继续提示投币, 当投币超过商品价格,则返回商品和找零,然后结束程序 """ def work9(): print("请按下面提示选择购买的商品:") print("1). 可乐 2.5元") print("2). 雪碧 2.5元") print("3). 哇哈哈 3元") print("4). 红牛 6元") print("5). 脉动 4元") print("6). 果粒橙 3.5元") num = input("请输入您的选项:") if num == "1": print("您购买的是可乐,需要支付金额为2.5元") price = 2.5 elif num == "2": print("您购买的是雪碧,需要支付金额为2.5元") price = 2.5 elif num == "3": print("您购买的是哇哈哈,需要支付金额为3元") price = 2.5 elif num == "4": print("您购买的是红牛,需要支付金额为6元") price = 2.5 elif num == "5": print("您购买的是脉动,需要支付金额为4元") price = 2.5 elif num == "6": print("您购买的是果粒橙,需要支付金额为3.5元") price = 2.5 else: print("您的输入有误!") # 输入错误的情况下使用return终止函数的运行(退出程序)。 return # 用户投币 money = 0 while money < price: m = input("请输入投币金额【支持1元,5元,10元】:") if m in ["1", "5", "10"]: money += int(m) else: print("您投币的金额有误或者不支持该面额") else: print("您的投币金额为{}元,商品的价格为{}元,找零{}元".format(money, price, (money - price))) work9()