【Python学习笔记】数据结构小练习

一、分析以下需求,并用代码实现:
1.根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入
2.涨工资的条件如下:
[10-15) +5000
[5-10) +2500
[3~5) +1000
[1~3) +500
[0~1) +200
3.如果用户输入的工龄为10,基本工资为3000,程序运行后打印格式"您目前工作了10年,基本工资为 3000元, 应涨工资 5000元,涨后工资 8000元"

def raisewage(workyear):
    if workyear>=10:
        return 5000
    elif workyear>=5:
        return 2500
    elif workyear>=3:
        return 1000
    elif workyear>1:
        return 500
    else:
        return 100
wy = int(input("请输入您的工龄:"))
wa = int(input("请输入您的基本工资:"))
print("您目前工作了{}年,基本工资为{}元, 应涨工资{}元,涨后工资{}元".format(wy,wa,raisewage(wy),raisewage(wy)+wa))

二、分析以下需求,并用代码实现:
1.珠穆朗玛峰高度为8848米,有一张足够大的纸,厚度为0.0001米。
2.请问,我折叠多少次,可以折成珠穆朗玛峰的高度。

import numpy as np
h =8848
print((int)(np.log(h/0.0001)/np.log(2)+1))

三、已知列表L = [5,10,15,20,25],要求创建一个新列表
1.新列表的长度和已知列表相同
2.新列表每个元素的值 是已知列表对应位置元素的2倍
3.在控制台中打印新列表的所有元素

l = [5, 10, 15, 20, 25]
l2 = [x*2 for x in l]
print(l2)

四、一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
例如输入:11 返回结果是7

class monkey:
     def __init__(self, index, next_mk):
         self.index = index
         self.next_mk = next_mk

first_monkey = None
current_monkey = None

n = int(input('请输入猴子个数:'))
for i in range(n):
    monkey_tmp = monkey(i + 1, None)

    if not first_monkey:
        first_monkey = monkey_tmp
        current_monkey = monkey_tmp
    else:
        current_monkey.next_mk = monkey_tmp
        current_monkey = monkey_tmp

current_monkey.next_mk = first_monkey

js = 0
while True:
    js += 1
    current_monkey = current_monkey.next_mk
    if js == 2:
        tmp = current_monkey.next_mk
        current_monkey.next_mk = tmp.next_mk
        del tmp
        js = 0

    if current_monkey.next_mk == current_monkey:
        break
print(current_monkey.index)

五、定义一个方法,去打印指定两个年份之间所有的闰年年份
如:将2000和2005传入方法,方法执行完毕会打印出这段之间的所有闰年年份
2000和2004
提示:
计算公历年闰年的算法: 四年一闰,百年不闰,四百年再闰
翻译:
满足如下任意一条即是闰年
1)年份是整百数的必须是400的倍数才是闰年
2)其他年份能被4的是闰年
实例: 2000 是整百数,并且是400的倍数所以是闰年; 2004年是4的倍数是闰年
2100 是整百的倍数但不是400的倍数,所以不是闰年

year = int(input("输入一个年份: "))
if (year % 100) == 0:
    if (year % 400) == 0:
        print("{0} 是闰年".format(year))  # 整百年能被400整除的是闰年
    else:
        print("{0} 不是闰年".format(year))
elif (year % 4) == 0:
    print("{0} 是闰年".format(year))  # 非整百年能被4整除的为闰年
else:
    print("{0} 不是闰年".format(year))

六、计算出5位数的回文数和7位数的回文数相差了多少个?
(设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。)
操作步骤描述:
1.创建一个函数,
2.定义两个函数分别统计出5位数的回文数个数和7位数的回文数个数
3.在主方法中分别调用者两个函数计算出相差的个数

num5 = filter(lambda x: str(x)[::-1] == str(x), range(10000, 100000)) # 900
num7 = filter(lambda x: str(x)[::-1] == str(x), range(1000000, 10000000)) # 9000
print(len(list(num7)) - len(list(num5)))

七、分析以下需求,并用代码实现
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13… 定义一个方法求出这个数列的前20 项之和。

from functools import reduce

current_fz = 2
current_fm = 1
li = [2/1]
for i in range(1, 20):
    fm = current_fz
    fz = current_fz + current_fm
    li.append(fz/fm)
    current_fz = fz
    current_fm = fm
print(li)
# reduce函数合并一个完整的序列,压缩,得到最终结果。
# reduce(function, sequence, initial=None)}
print(reduce(lambda x, y: x + y, li))

八、训练描述:【类和对象】
一、有以下数据:
1.三个老师信息:
教师编号 姓名 性别 年龄 科目
t001 薛之谦 男 26 Java
t002 张碧晨 女 24 IOS
t003 张杰 男 28 Java
2.存储两个科目信息:
课程编号 名称 创建时间 课程描述
s001 Java 2007-02-08 Java学科,包含JavaSE和JavaEE
s002 IOS 2007-02-09 IOS系统开发
二、请分别定义两个类;
三、创建相应对象,通过构造方法给成员变量赋值。
四、打印每个对象的所有属性。
要求:每个类要按照封装的原则进行定义。并提供有参数的构造方法。

class Person:
    def __init__(self,no,name,sex,age,science):
        self.no=no
        self.name=name
        self.sex=sex
        self.age=age
        self.science=science
    
    def print1(self):
        print('教师编号:{};姓名:{};性别:{};年龄:{};科目:{}'\
              .format(self.no,self.name,self.sex,self.age,self.science))

class Course:
    def __init__(self,sno,sname,stime,sment):
        self.sno=sno
        self.sname=sname
        self.stime=stime
        self.sment=sment
    
    def print2(self):
        print('课程编号:{};名称:{};创建时间:{};课程描述:{}'\
              .format(self.sno,self.sname,self.stime,self.sment))

person1 = Person('t001', '薛之谦', '男', 26, 'Java')
person2 = Person('t002', '张碧晨', '女', 24, 'IOS')
person3 = Person('t003', '张杰', '男', 28, 'Java')
person1.print1()
person2.print1()
person3.print1()
course1 = Course('s001', 'java', '2007-02-08', 'Java学科,包含JavaSE和JavaEE')
course2 = Course('s002', 'IOS', '2007-02-09', 'IOS系统开发')
course1.print2()
course2.print2()

九、分析以下需求,并用代码实现
1.定义一个列表,存入多个字符串
如:“ab1” “123ad” “bca” “dadfadf” “dddaaa” “你好啊” “我来啦” “别跑啊”
2.遍历列表,删除长度大于5的字符串,打印删除后的列表
3.基于上一步,删除列表中元素包含0-9数字的字符串(只要字符串中包含0-9中的任意一个数字就需要删除此整个字符串)

import re
li = ['ab1', '123ad', 'bca', 'dadfadf', 'dddaaa', '你好啊', '我来啦', '别跑啊']
li2 = filter(lambda x: len(x) <= 5, li)
li2 = list(li2)
print(li2)
li3 = filter(lambda x: not bool(re.search(r'\d', x)), li2)
print(list(li3))

十、分析以下需求,并用代码实现
1.项目根目录下建立文件: user.txt,文件中存放用户名和登录密码,格式:用户名,密码,如:aaa,123;
2. user.txt文件中初始存放的用户信息有如下:
jack,123
rose,123
tom,123
3.要求完成如下功能:
程序运行时:控制台提示用户输入注册的用户名和密码;
验证键盘录入的用户名跟user.txt中已注册的用户名是否重复:
是:控制台提示:用户名已存在
否:将键盘录入的用户名及密码写入user.txt文件,并在控制台提示:注册成功;

f = open('user.txt')

username = input("Username:")
password = input("Password:")

flag = False # username在文件中不存在
for line in f.readlines():
	strs = line.split(",")
	if (strs[0] == username):
		flag = True

if(flag):
	print("用户名已存在!")
else:
	f=open("user.txt","a")
    f.writelines(username+","+password)
    print("注册成功!")
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值