python基础入门——深蓝学院课后习题(三)

1、python函数有几部分组成?分别是什么?

函数名称 函数参数 表达式 函数返回值

2、可变参数在函数中如何表示?关键值参数是什么?

* args 表示多个参数,只有值的可变参数

** kwargs 表示多个字典参数

关键值参数:name = value的形式

3、如何在函数中修改全局变量的值?嵌套函数中如何修改外部函数的局部变量?

global适用于函数内部修改全局变量的值

nonlocal适用于嵌套函数中内部函数修改外部变量的值

global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误。

global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。

4、使用函数完成1-100相加的递归函数

def num_sum(n):
    if n == 1:
        return 1
    else:
        return n + num_sum(n-1)

print (num_sum(100))

输出结果:
5050

5、编写程序,输入一⾏字符,分别统计出其中英文字母、空格、数字和其它字符的 个数。

参考:https://www.cnblogs.com/python-xkj/p/9225985.html

for i in tmpStr:
    if i.isalpha():
        alphaNum +=1
    elif i.isnumeric():
        numbers +=1
    elif i.isspace():
        spaceNum +=1
    else:
        otherNum +=1
print('字母=%d'%alphaNum)
print('数字=%d'%numbers)
print('空格=%d'%spaceNum)
print('其他=%d'%otherNum)

6、编写程序,运行后用户输入 4 位整数作为年份,判断其是否为闰年。如果年份能被 400 整除,则为闰年;如果年份能被 4 整除但不能被 100 整除也为闰年。

def leap_year(year):
    if year % 400 == 0 :
        print('该年为闰年')
    elif year % 4 == 0 and year % 4 != 0 :
        print('该年为闰年')
    else:
        print('该年非闰年')

while True:
    year = input('请输入四位整数年份:')
    if year == 'exit':
        break
    year = int(year)
    leap_year(year)

7、编写函数,判断一个整数是否为素数,并编写主程序调用该函数。

素数(也称质数),是指除了1和该数本身,不能被任何正整数整除的正整数。判断一个正整数m是否为素数,只要判断m可否被2~根号m之中的任何一个正整数整除,如果m不能被此范围中任何一个正整数整除,m即为素数,否则m为合数。

参考:https://blog.csdn.net/langzihml/article/details/80042574

import math


m = int(input("请输入一个整数(>1):"))
k = int(math.sqrt(m))
for i in range(2, k+2):
    if m % i == 0:
        break #可以整除,肯定不是素数,结束循环
print(i)
if i == k+1:
    print("是素数")
else:
    print("是合数")

8、编写函数,写出菲波那切数列,并计算fibonaaci(10)

参考:https://www.cnblogs.com/wolfshining/p/7662453.html

from functools import reduce

def add(x,y):
    return x + y

def fibonaaci(n):
    lis = []
    for i in range(n):
        if i == 0 or i == 1:  # 第1,2项 都为1
            lis.append(1)
        else:
            lis.append(lis[i - 2] + lis[i - 1])  # 从第3项开始每项值为前两项值之和
    print(lis)
    sum = reduce(add, lis)
    print(sum)
    return sum

fibonaaci(10)

9、lambda函数转换:def func(a, b=1): return a*b

result = lambda a, b = 1: a * b
print(result(a = 4))

10、在 Python 中导入模块中的对象有哪几种方式?

11、编程实现:当前有一个a.py模块,里面定义一个start()方法,如何在同目录下b.py模块下调用start方法,请实现并验证

---------b.py------------ 方法1

import a

a.start()


---------b.py------------ 方法2

from a import start

start()

12、编程实现:如何防止from ... import * 导入模块中的“隐私”属性,编程实现 一个例例子,并验证

_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入

__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)

13、嵌套循环导入会发生什么?验证下面的例子

win10 + pycharm编译器内会报错:

AttributeError: module 'a' has no attribute 'run'

14、sys.path与PYTHONPATH的作用是什么?

sys.path是一个python搜索模块的路径列表,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH 安装目录

os.environ['PYTHONPATH']

 PYTHONPATH是Python中一个重要的环境变量,用于在导入模块的时候搜索路径

参考:https://www.jianshu.com/p/04701cb81e38

15、包中的__init__.py文件有什么用途

一种带有特殊_init_.py的文件的python模块的文件目录,控制着包的导入行为,用于组织包(package),方便管理各个模块之间的引用、控制着包的导入行为

参考:https://blog.csdn.net/weixin_38256474/article/details/81228492

16、import和from导入的包的区别

from 与 import 的异同:

from A import a1 是从A模块导入a1工具(可以是某个 函数,全局变量,类),程序进行的修改不会影响到被导入的原模块,且不同程序之间不会互相影响,import A是导入整个A模块的全部内容(包括全部的函数,全局变量,类),程序之间会互相影响,包括原模块。

当多个程序需要同时导入一个模块并且都是访问时,使用import 可以节省内存空间

当多个程序需要同时导入一个模块当其中一个需要修改模块,那么修改的模块的程序应该使用from来导入模块

17、包的绝对导入和相对导入

绝对导入:所有的模块import都从“根节点”开始。根节点的位置由sys.path中的路径决定,项目的根目录一般自动在sys.path中。如果希望程序能处处执行,需手动修改sys.path。

相对导入:只关心相对自己当前目录的模块位置就好。不能在包(package)的内部直接执行(会报错)。不管根节点在哪儿,包内的模块相对位置都是正确的。

参考:https://blog.csdn.net/weixin_38256474/article/details/81228492

18、编程实现:构造在不同路径下的两个模块,使用不同方法进行导入

参考:https://blog.csdn.net/weixin_38256474/article/details/81228492

19、编程实现:__main__如何是使用,其他类似:__file__

参考:https://www.cnblogs.com/jianbonet/p/8663040.html

变量__file__表示文件本身,输出的是一个相对路径(但在pycharm中会自动输出绝对路径),所以需要将其转换成绝对路径

__name__变量在脚本本身执行和在被调用执行的区别,脚本本身执行的话其输出为__main__,在被调用时执行则输出原脚本的名字,所以可以在脚本的逻辑代码前加一句判断,使得被调用是不会执行原脚本的逻辑代码,只允许调用方法。

if __name__ == '__main__':
    逻辑代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值