Python学习笔记之基础练习(二)

第一题:   

    题目描述:计算字符串最后一个单词的长度,单词以空格隔开。
    输入描述: 一行字符串,非空,长度小于5000。
    输出描述: 整数N,最后一个单词的长度。

    示例1:

         输入:hello world

 输出:5

        方法一:完全使用字符串

    str_input = input('输入一个字符串:').strip()   #对输入的字符串进行左右去空格处理
    len_str = 0
    for char in str_input[::-1]:
        if char == ' ':
            break
        else:
            len_str +=1
    print('最后一个单词的长度:%d'%(len_str))

        方法二:使用list

    str_input = input('输入一个字符串:').strip()   #对输入的字符串进行左右去空格处理
    list_str = str_input.split()   #使用空格将字符串分割成一个列表形式.
    print(len(list_str[-1]))

第二题:  

     2. 计算字符个数

           题目描述: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入

    字符串中含有该字符的个数。不区分大小写。

            输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符。
            输出描述:输出输入字符串中含有该字符的个数。
    示例1:
    输入:ABCDEF A
    输出:1 
    str_tmp = input("输入字符串")
    list_tmp = str_tmp.split()
    str1 = str()
    char = str()
    count = 0
    for str1 in list_tmp[:-1]:   #遍历列表除了,最后一个元素以外
        for char in str1:        #在每一个元素中寻找的字符中寻找与目标字符相符合的字符
            if char == list_tmp[-1]:
                count +=1
    print(count)

第三题:

        题目描述:
       密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
      假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和
 其他的符号都不做变换。
声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦.
输入描述:输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾;
输出描述:输出渊子真正的密文

示例1:
输入:YUANzhi1987
输出:zvbo9441987

    Original_Password = []
    dict_num = {'a':2,'b':2,'c':2,'d':3,'e':3,'f':3,'g':4,'h':4,'i':4,'j':5,'k':5,'l':5,'m':6,'n':6,'o':6,'p':7,'q':7,'r':7,'s':7,'t':8,'u':8,'v':8,'w':9,'x':9,'y':9,'z':9}
    print(len(dict_num))
    str_passwd = input('输入加密后的密码:')
    if str_passwd.find(' ') == -1 and len(str_passwd) < 100:
        for char in str_passwd[:]:
            if char.isupper() and char != 'Z':
                Original_Password.append(chr(ord(char.lower())+1))
            elif char.islower():
                Original_Password.append(str(dict_num[char]))
            elif char == 'Z':
                Original_Password.append('a')
            else :
                Original_Password.append(char)
        Original_Password_str = ''.join(Original_Password)
        print(Original_Password_str)
    else:
        print('密码带有非法字符空格!')

第四题:

       给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
- 输入描述:
      输入包括一个整数n,(3 ≤ n < 1000)
- 输出描述:
      输出对数
- 示例1 :
输入:
    10
输出:

    2

count = 0
in_num = int(input('输入一个3~1000整数:'))
if 3 <= in_num < 1000:
    list_num = []
    for i in range(1,in_num):   #寻找在1~in_num之间的质数
        for num in range(2,i):  #判断数字i是不是质数,如果是质数,则将以该数为索引值的元素变为1,如果不是则将以该数为索引值的元素置0
            if i%num == 0:
                list_num.append(0)
                break
        else:
            list_num.append(1)
    half_len = len(list_num)//2
    for i in range(half_len+1):
        if list_num[i] == 1:             
            for j in range(half_len,len(list_num)-i):
                if list_num[j] == 1:
                    if i + j+2 == in_num:
                        count +=1
    print(count)
else:
    print('输入一个3~1000整数')

第五题:

        现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。
输入描述:输入一个ip地址
输出描述:返回判断的结果YES or NO
ip_str = input('请输入IP地址')
if ip_str.find(' ') == -1:
    ip_list = ip_str.split('.')
    if len(ip_list) == 4:
        for char in ip_list:
             if not char.isdecimal() or  int(char) > 255 or int(char) < 0:
                 print("NO")
                 break
        else:
            print("YES")
    else:
        print("NO")
else:
    print("NO")

第六题:

学生管理系统, 分为管理员登陆和学生登陆;
        管理员登陆, 可以操作:
                管理员密码修改;
                添加学生的信息;
                删除学生的信息;
                修改学生的信息;
                查询学生的信息(根据学号);
                查看所有学生的信息;
                退出系统;
        学生登录:
                查询个人信息;
                修改密码;
        学生信息包括:
               学号, 姓名, 性别, 班级, 出生年月, 用户名, 密码
               学生用户名和学号保持一致;
        管理员信息包括:  用户名, 密码

administrator = {
    'root':
        {
            'username':'root',
            'passwd':'123456'
        },
    'teacher':
        {
            'username':'teacher',
            'passwd':'123456'
        }
}
user ={
    '061501':
    {
        'username':'061501',
        'passwd':'061501',
        'studentId':'061501',
        'name':'liya',
        'gender':'1',
        'student_class':'1602',
        'birthday':'2000-01-15'
    }
}

infor = """****学生管理系统****
    1)管理员登录
    2)学生登录
    3)退出
"""
admin_menu = """    管理员操作界面
    1)密码修改
    2)添加学生
    3)删除学生
    4)修改学生信息
    5)查询学生的信息(根据学号)
    6)查看所有学生的信息
    7)返回上一层
    8)退出系统"""

change_student_infor_menu = """ 
    1)修改姓名
    2)修改性别
    3)修改班级
    4)修改出生日期
    5)修改密码
    6)退出修改
"""


student_menu_str = """
    1)查询个人信息;
    2)修改密码;
    3)返回上一层
    4)退出系统
"""

user_login_str = {'administrator':None , 'user':None}     #保存当前登陆的用户
def admin_change_passwd():
    print('当前位置:管理员密码修改,退出请按q')
    old_passwd = input('输入旧的密码:')
    if old_passwd == 'q':
        return
    new_passwd = input('输入新的密码:')
    if new_passwd == 'q':
        return
    new_passwd_confirm = input('再次确认新密码')
    if new_passwd_confirm == 'q':
        return
    if old_passwd == administrator[user_login_str['administrator']]['passwd']:
        if new_passwd == new_passwd_confirm:
            administrator[user_login_str['administrator']]['passwd']= new_passwd
            print('密码修改成功:')

        else:
            print('两次密码不一致')

    else:
        print('原始密码不正确:')


def add_student():
    print('当前位置:注册用户')
    studentId = input('请输入学号').strip()

    if studentId and studentId not in user:
        passwd = input("密码")
        name = input('姓名:')
        gender = input("性别(男-1 , 女-2)")
        if not gender:
            gender = None
        else:
            gender = int(gender)
        student_class = input("班级:")
        birthday = input('出生年月(年-月-日):')
        user[studentId] = {
            'username': studentId,
            'passwd': studentId,
            'studentId': studentId,
            'name': name,
            'gender': gender,
            'student_class': student_class,
            'birthday': birthday
        }
        print("注册成功")
    else:
        print("用户已经被注册")


def del_student():
    print('当前位置:删除学生信息')
    del_id = input('请输入要删除的学生的学号:')
    if del_id in user:
        del user[del_id]
    else:
        print('该学生不存在!')




#函数功能 :修改学生除账号,学号以外的所有信息
def change_student_infor():
    studentId = input('请输入学号').strip()
    print(change_student_infor_menu)
    if studentId in user:
        change_Oper = input('输入操作序号:')
        while change_Oper != '6':
            if change_Oper == '1':
                newname = input('输入姓名:')
                user[studentId]['name'] = newname
                print('姓名修改成功')
            elif change_Oper == '2':
                newgender = input('性别(男-1 , 女-2)')
                user[studentId]['gender'] = newgender
                print('性别修改成功')
            elif change_Oper == '3':
                newstudent_class = input('班级:')
                user[studentId]['student_class'] = newstudent_class
                print('班级修改成功')
            elif change_Oper == '4':
                newbirthday = input('出生日期:')
                user[studentId]['birthday'] = newbirthday
                print('出生日期修改成功')
            elif change_Oper == '5':
                newpasswd = input('输入新的密码:')
                newpasswd_confirm = input('再次确认新密码')
                if newpasswd == newpasswd_confirm:
                    user[studentId]['passwd'] = newpasswd
                    print('密码修改成功!')
                else:
                    print('两次密码不一致')
            else :
                print('%s错误的操作命令!!!' % (change_Oper))
            change_Oper = input('输入操作序号:')
            print(change_student_infor_menu)
    else:
        print('该学生不存在!')

# 查看学生的所有信息
def view_student_infor_one():
    studentId = input('请输入学号').strip()
    if studentId in user:
        print(user[studentId])
    else:
        print('该学生不存在!')


# 查看所有学生的所有信息
def view_student_infor_all():
    if  user :
        print(user)
    else:
        print('没有录入学生信息!')


# 管理员登录验证
def administrator_login():
    count =0
    while count < 3 :
        admin_username = input('账号:')
        if admin_username in administrator:
            admin_passwd = input('密码:')
            if admin_passwd == administrator[admin_username]['passwd']:
                print('登陆成功')
                user_login_str['administrator'] = admin_username     #保存当前登陆的用户
                return True
            else:
                print("密码不正确!!!")
                return False
        else:
            print('不存在的管理员!!!')
            return False
    else :
        print("尝试次数过多,退出!")
        return False



def administrator_operation():
    admin_Oper = input('输入操作序号:')
    if admin_Oper == '1':
       admin_change_passwd()
       return True
    elif admin_Oper == '2':
        add_student()
        return True
    elif admin_Oper == '3':
        del_student()
        return True
    elif admin_Oper == '4':
        change_student_infor()
        return True
    elif admin_Oper == '5':
        view_student_infor_one()
        return True
    elif admin_Oper == '6':
        view_student_infor_all()
        return True
    elif admin_Oper == '7':
        user_login_str['administrator'] = None      #退出时将当前登录用户消除
        return False
    elif admin_Oper == '8':
        exit(0)
    else :
        print('%s错误的操作命令!!!' % (admin_Oper))
        return True


# 学生登录
def student_login():
    count =0
    while count < 3 :
        student_username = input('账号:')
        if student_username in user:
            student_passwd = input('密码:')
            if student_passwd == user[student_username]['passwd']:
                print('登陆成功')
                user_login_str['user'] = student_username     #保存当前登陆的用户
                return True
            else:

                print("密码不正确!!!")
                return False
        else:
            print('不存在的学生学号!!!')
            return False
    else :
        print("尝试次数过多,退出!")
        return False

def student_operation():
    student_Oper = input('输入操作序号:')
    if student_Oper == '1':
        view_student_self()
        return True
    elif student_Oper == '2':
        student_change_passwd()
        return True
    elif student_Oper == '3':
        user_login_str['user'] = None      #退出时将当前登录用户消除
        return False
    elif student_Oper == '4':
        exit(0)
    else:
        print('%s错误的操作命令!!!' % (student_Oper))
        return True


# 学生查看自己的信息
def view_student_self():
    print(user[user_login_str['user']])

# 学生修改自己密码
def student_change_passwd():
    print('当前位置:学生修改自己密码,退出请按q')
    old_passwd = input('输入旧的密码:')
    if old_passwd == 'q':
        return
    new_passwd = input('输入新的密码:')
    if new_passwd == 'q':
        return
    new_passwd_confirm = input('再次确认新密码')
    if new_passwd_confirm == 'q':
        return
    if old_passwd == user[user_login_str['user']]['passwd']:
        if new_passwd == new_passwd_confirm:
            administrator[user_login_str['user']]['passwd']= new_passwd
            print('密码修改成功:')
        else:
            print('两次密码不一致')
    else:
        print('原始密码不正确:')

def main():
    while True:
        print(infor)
        Oper_str = input('输入操作序号:')
        if Oper_str == '1':
            if administrator_login():
                mark_login = True
                while mark_login :
                    print(admin_menu)
                    mark_login=administrator_operation()
        elif Oper_str == '2':
            if student_login():
                stu_mark_login = True
                while stu_mark_login :
                    print(student_menu_str)
                    stu_mark_login=student_operation()
        elif Oper_str == '3':
            exit(0)
        else:
            print('%s错误的操作命令!!!'%(Oper_str))

main()


























猜你喜欢

转载自blog.csdn.net/m0_37717595/article/details/80164918