Python课程第一天作业

一、第一题:简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型?

计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:
  1. 编译

  2. 解释

由此高级语言也分编译型语言解释型语言

 

1.编译型语言

使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

特点

在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

总结

1.一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
2.与特定平台相关,一般无法移植到其他平台;
3.现有的C、C++、Objective等都属于编译型语言。

2.解释型语言

使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。

特点

解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

总结

1.解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
2.只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
3.PHP/Java/JavaScript/Python/Perl/Ruby等属于解释型语言。

 二、执行 Python 脚本的两种方式是什么

运行Python有两种方式--解析器运行和源文件运行。

1.解析器运行

在命令行输入python就能启动解析器,我们安装下面的方式输入就马上能得到打印信息

Windows环境下:

Linux环境下:

2.使用源文件运行

写一个简单的Python脚本,并执行

三、Python单行注释和多行注释分别用什么?

python单行注释符号(#)

井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释。
print 1 #输出1
#号右边的内容在执行的时候是不会被输出的。

批量、多行注释符号

在python中也会有注释有很多行的时候,这种情况下就需要批量多行注释符了。多行注释是用三单引号'''   '''或三双引号""" """包含的,二者并没有什么区别

四、布尔值分别有什么?

一个True一个False。
python中以下类型的布尔值是False,其余为True
1.None
2. False
3.所有的值为零的数
4.""
5.[]
6.()
7.{}

五、声明变量注意事项有那些?

(1).变量由数字、字母和下划线组成
(2).变量不能以数字开头
(3).变量不能使用Python关键字
(4).变量区分大小写
     模块名,包名 :小写字母, 单词之间用_分割。
     类名:首字母大写。
     全局变量: 大写字母, 单词之间用_分割。
     普通变量: 小写字母, 单词之间用_分割。
     函数: 小写字母, 单词之间用_分割。
     实例变量: 以_开头,其他和普通变量一样 。
     私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
     专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。

六、如何查看变量在内存中的地址?

id(变量名)查看

七、写代码(实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
import time
user_lsit=['seven','alex']
passwd='123'
count = 0
while count < 3:
    count += 1
    login_user=input('请输入您的用户名:')
    login_passwd=input('请输入您的密码:')
    #login_passwd=getpass.getpass('密码:') #Paycharm下无法使用getpass方法
    if (login_user  in user_lsit) and login_passwd == passwd:
        print('登录成功')
        break
    else:
        if count == 3:
            print('失败次数过多,程序退出.....')
            time.sleep(1)
            exit(1)
        else:
            print('登录失败,请重新输入!')

八、写代码(使用while循环实现输出2-3+4-5+6...+100 的和、1-100 内的所有奇数及1-100 内的所有偶数)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#计算指定数字之间的总和,默认为1至100
def calculate_the_sum_of_numbers(init_number=2,max_number=100):
    if judgement_size(init_number,max_number) == 0:
        return 0
    judgement_size(init_number, max_number)
    starting_value=init_number
    sum_of_number=0
    while init_number !=  (max_number + 1):
        sum_of_number=(sum_of_number + init_number)
        init_number += 1
    print('%d 至 %d 的数字之和为:%d' %(starting_value,max_number,sum_of_number))

#打印指定数字之间的奇数和偶数,默认为1至100
def print_odd_even_number(init_number=1,max_number=100):
    if judgement_size(init_number,max_number) == 0:
        return 0
    odd_lsit=[]
    even_lsit=[]
    starting_value = init_number
    while init_number != (max_number + 1):
        if (init_number%2) == 1:
            odd_lsit.append(init_number)
            init_number += 1
        else:
            even_lsit.append(init_number)
            init_number += 1
    print('%d 至 %d 的数字之间的奇数为:  %s' %(starting_value,max_number,odd_lsit))
    print('%d 至 %d 的数字之间的偶数为:  %s' %(starting_value,max_number,even_lsit))

#判断起始值和结束值得大小
def judgement_size(num1,num2):
    max_num=max(num1,num2)
    if max_num != num2:
        print('最大值必须必起始值大!')
        return 0

calculate_the_sum_of_numbers()
print_odd_even_number()  

九、用户登录(多用户、失败3次被锁、、支持新建)  

流程图:

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
white_user_set=[]
black_user_set=[]
user_list=[]
white_userDB='white_userDB'
black_userDB='black_userDB'

with open(black_userDB, 'r+') as black_f:
    for black_user  in black_f.readlines():
        black_user = black_user.strip("
")
        black_user_set.append(black_user)

with open(white_userDB, 'r+') as white_f:
    for file in white_f.readlines():
        file = file.strip("
")
        user,passwd= file.split(':')
        white_user_set.append({'name':user,'passwd':passwd})
        user_list.append(user)

def user_register():
    count=0
    while True:
        count+=1
        register_name = input('创建用户名:')
        register_passwd = input('创建密码:')
        register_passwd1 = input('创建密码:')
        if register_passwd == register_passwd1:
            if register_name in user_list:
                print('用户已存在,请重新创建')
            else:
                user_information=register_name+':'+register_passwd
                print(user_information)
                print(type(user_information))
                with open(white_userDB,'a+') as f:
                    f.write('
')
                    f.write(user_information)
                print('恭喜您,用户创建成功!!!')
                return 0
        else:
            if count == 3:
                print('失败次数超过上限,程序退出')
                exit(3)
            print('两次密码不一致,请重新创建2')



def user_login():
    Flag = True
    user_failures = 0
    all_failures = 0
    while Flag:
        login_name = input('请输入用户名:')
        login_passwd = input('输入密码:')
        print(login_name,login_passwd)
        if login_name in black_user_set:
            print('该用户已被锁定,请联系您的管理员!')
            exit(3)
        if login_name in user_list:
            for subscript,line in enumerate(white_user_set):
                if (login_name == line['name']) and (login_passwd == line['passwd']):
                    print('登录成功')
                    print('正在登录。请稍后')
                    time.sleep(1)
                    print('')
                    print('='*30)
                    print('欢迎来到 250 世界')
                    print('='*30)
                    Flag = False
                    break
            for subscript,line in enumerate(white_user_set):
                if (login_name == line['name']) and (login_passwd != line['passwd']):
                    user_failures += 1
                    all_failures += 1
                    if (user_failures == 3):
                        print('验证失败次数过多,用户被锁定')
                        with open(black_userDB,'a+') as f:
                            f.write(login_name+'
')
                            exit(2)
                    print('用户名或密码不正确,登录失败,请重新登录 2 ')
                    break
        else:
            print('用户名或密码不正确,登录失败,请重新登录 3 ')
            all_failures += 1
            if all_failures == 6:
                print('失败次数过多,请确认后再登录 4')
                exit(1)

def main():
    while True:
        count=0
        print('1  注册用户:')
        print('2  登录系统:')
        user_operation=input('请选择您的操作:')
        print(type(user_operation))
        if user_operation == '1':
            user_register()
            break
        elif user_operation == '2':
            user_login()
            break
        else:
            count+=1
            if count == 3:
                print('失败次数过多,请确认后再登录')
                exit(3)
            print('非法的输入,请重试')
            
if __name__ == '__main__':
    main()

  

原文地址:https://www.cnblogs.com/panwenbin-logs/p/10571435.html