天天看點

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()