45gfg9
本帖最后由 45gfg9 于 2020-3-18 23:33 编辑

索引贴
答案帖


Prev: Python3Ⅱ:控制结构
Next: Python3Ⅳ:异常 & 文件


2021.12 数据,可能有更多内容
索引贴
答案帖

Prev: Python3Ⅱ:控制结构
Next: Python3Ⅳ:异常 & 文件



1 代码重用


1.1 重用代码


代码重用Code reuse在任何编程语言中都是很重要的一部分。增加代码量使其更难维护。
一个编程大项目如果想要成功,就不能不遵循不要重复自己Don't Repeat Yourself,或DRY,原则。我们之前已经见过这样的一种方法:通过使用循环。在这一章里,我们会再探索两个:函数和模块。
质量低下且重复性高的代码被称作遵循WET原则,意指什么都写两遍Write Everything Twice,或我们享受打字We Enjoy Typing

Part题:
遵守DRY原则使代码:
A. 永远循环
B. 更易维护
C. 质量低下且重复性高


1.2 函数(一)


你在之前的学习中已经用过函数functions了。
任何语句,如果前面是词,后面有包含值的圆括号,那么这就是一个函数调用。
下面是你已经见过的一些例子:
```py
print("Hello world!")
range(2, 20)
str(12)
range(10, 20, 3)
```
圆括号前的词是函数,圆括号内的逗号分隔值是函数参数arguments

Part题:
这个函数调用中有几个参数?
```py
range(0, 100, 5)
```





2 函数


2.1 函数(二)


除了用内置函数外,你可以用def语句创建你自己的函数。
下面是一个名为my_func的函数的例子。它不接受参数,并输出三次"spam"。它先被定义再被调用。函数内的语句只有在调用的时候才会执行。
```py
def my_func():
   print("spam")
   print("spam")
   print("spam")


my_func()
```
结果:
```py
>>>
spam
spam
spam
>>>
```
每个函数内的代码块都以冒号 ( : ) 开头,并被缩进indented

Part题:
填空定义一个名hello的函数:
```py
___ hello() _
    print("Hi!")
```


2.2 函数(三)


你必须在调用函数之前先定义函数,就像你在使用变量前必须先赋值。
```py
hello()


def hello():
    print("Hello world!")
```
结果:
```py
>>>
NameError: name 'hello' is not defined
>>>
```
Part题:
重新排列代码,定义函数sayHi()并调用。
```py
1. def sayHi():
2.  print("Hi!")
3. sayHi()
```





3 函数参数


3.1 参数(一)


所有目前为止我们见过的函数都是零参函数,调用时带着空的圆括号。
然而,大多数函数都要接受参数。
下面的例子定义了一个接受一个参数的函数。
```py
def print_with_exclamation(word):
   print(word + "!")


print_with_exclamation("spam")
print_with_exclamation("eggs")
print_with_exclamation("python")
```
结果:
```py
>>>
spam!
eggs!
python!
>>>
```
如你所见,参数定义在圆括号内。

Part题:
下面代码的结果?
```py
def print_double(x):
    print(2 * x)


print_double(3)
```


3.2 参数(二)


你也可以定义有不止一个参数的函数;用逗号分隔。
```py
def print_sum_twice(x, y):
   print(x + y)
   print(x + y)


print_sum_twice(5, 8)
```
结果:
```py
>>>
13
13
>>>
```
Part题:
填空定义一个函数,接受两个参数,输出它们的积。
```py
___ print_mult(x, y) _
    print(x * _)
```


3.3 参数(三)


函数参数在函数定义内可以当成变量来用,然而,在函数定义之外就用不了了。这也适用于其他在函数内创建的变量。
```py
def function(variable):
   variable += 1
   print(variable)


function(7)
print(variable)
```
结果:
```py
>>>
8


NameError: name 'variable' is not defined
>>>
```
技术上来讲,形参parameter指函数定义中的变量,实参arguments指当函数被调用时作为参数的值。

Part题:
填空定义函数,当参数为偶数时输出"Yes",否则"No"。
```py
___ even(x):
    if x%2 == 0:
  _____ ("Yes")
    _____
  print("No")
```





4 从函数中返回


4.1 从函数中返回(一)


某些函数,像intstr,会返回一个值以供后续使用。
要让你的自定义函数做到这一点,你可以用return语句。
举例:
```py
def max(x, y):
    if x >=y:
  return x
    else:
  return y


print(max(4, 7))
z = max(8, 5)
print(z)
```
结果:
```py
>>>
7
8
>>>
```
return语句在函数定义外的地方不可使用。

Part题:
填空定义一个函数,比较它两个实参的长度,并返回短的那个。
```py
def shortest_string(x, y):
    if len(x) <= ___(y):
  ______ x
    else:
  ______ y
```


4.2 从函数中返回(二)


如果从函数中返回值,那么它就会停止执行。return语句后的任何语句都不会被执行。
多说无益:
```py
def add_numbers(x, y):
total = x + y
return total
print("看不到这条")


print(add_numbers(4, 5))
```
输出:
```py
>>>
9
>>>
```
Part题:
下面这个函数被调用后输出的最大数字是多少?
```py
def print_numbers():
    print(1)
    print(2)
    return
    print(4)
    print(6)
```





5 注释 & 文档字符串


5.1 注释


注释Comments是使代码更易懂的注解。它不会影响代码运行。
在Python中,注释用井号 (#)创建。在那一行内它后面的所有字符都被忽略。
例:
```py
x = 365
y = 7
# 这是一行注释


print(x % y) # 求余
# print (x // y)
# 另一条注释
```
结果
```py
>>>
1
>>>
```
Python没有像C等语言中有的多行注释。

Part题:
填空注释掉文字。
```py
x = 8
_ 输出x
print(x)
```


5.2 文档字符串


文档字符串Docstrings (documentation strings) 用途与注释类似,都用来解释代码。然而它更具体,语法也不同。它是通过在函数定义的第一行写一个描述函数的多行字符串创建的。
```py
def shout(word):
"""
在字符串后加一个叹号
并输出
"""
print(word + "!")


shout("spam")
```
结果
```py
>>>
spam!
>>>
```
不像普通的注释,文档字符串在程序运行时会保留。这允许程序员在运行时检查这些注释。

Part题:
文档字符串能包含多行文字么?( Y / N )





6 函数作对象


6.1 函数(四)


尽管函数与普通变量创建的方式不同,但函数也与其他类型的值无异。
它们可以(重新)赋值给变量,在之后就可以用这些标识符来引用。
```py
def multiply(x, y):
   return x * y


a = 4
b = 7
operation = multiply
print(operation(a, b))
```
输出
```
>>>
28
>>>
```
上面的例子将函数multiply赋给变量operation。现在,通过operation也可以调用函数了。

Part题:
下面代码的输出?
```py
def shout(word):
    return word + "!"
speak = shout
output = speak("shout")
print(output)
```
A. shout!
B. word!
C. speak!


6.2 函数(五)


函数同样能作其他函数的实参
```py
def add(x, y):
return x + y


def do_twice(func, x, y):
return func(func(x, y), func(x, y))


a = 5
b = 10


print(do_twice(add, a, b))
```
结果
```py
>>>
30
>>>
```
如你所见,do_twice函数以函数作实参,并在它的函数体内调用。

Part题:
填空将函数square作为实参传给函数test。
```py
___ square(x):
    return x * x


def test(func, x)_
    print(func(x))


test(______, 42)
```





7 模块


7.1 模块(一)


模块Modules是人们写下来用于完成某个常见任务的一系列代码,例如生成随机数,或是数学方面的运算,等等。
使用模块的最基础方法就是将import 模块名加在你的代码上方,然后用模块名.变量的方法来访问模块中的某个变量。
举例,下面的例子导入了random模块生成随机数:
```py
import random


for i in range(5):
   value = random.randint(1, 6)
   print(value)
```
结果
```py
>>>
2
3
6
5
4>>>
```
上面的代码用random模块中定义的randint函数输出1到6的范围内的5个随机数。

Part题:
下面代码用到了哪个模块?
```py
import math
num = 10
print(math.sqrt(num))
```
A. sqrt
B. math
C. num


7.2 模块(二)


有时候你只需要使用模块中的某个成员,这时你可以用import的另一种形式。
此种形式为from 模块名 import 变量,之后这个变量就可以直接使用了,就像它是在你的代码中定义的一样。
```py
from math import pi


print(pi)
```
结果
```py
>>>
3.141592653589793
>>>
```
用逗号分隔列表导入多个对象。例如:
```py
from math import pi, sqrt
```
用*导入模块中的所有对象。例:from math import *
一般来说不建议这样做,因为它有时会将你代码中的变量与外部模块中的变量混淆。

Part题:
填空只从math模块中导入cos和sqrt函数。
```py
____ math import _____ cos
```


7.3 模块(三)


尝试导入一个不可用的模块会产生ImportError导入错误
```py
import some_module
```
结果
```py
>>>
ImportError: No module named 'some_module'
>>>
```
Part题:
导入一个位置模块产生的是什么错误?
A. ModuleError模块错误
B. ImportError
C. UnknownModuleError找不到模块错误


7.4 模块(四)


你可以用as关键字将模块或对象导入为不同的名字。这主要用于当模块或对象的名字很长或很迷惑人的时候。
例:
```py
from math import sqrt as square_root
print(square_root(100))
```
结果:
```py
>>>
10.0
>>>
```
Part题:
下面代码的输出是?
```py
import math as m
print(math.sqrt(25))
```
A. 5
B. 25
C. 产生错误





8 标准库 & pip


8.1 模块(五)


Python中的模块主要有三种类型:你自己写的,你从外部安装的,和Python自带的。
最后一种就叫做标准库standard library,包含许多有用的模块。一些标准库中有用的模块有stringredatetimemathrandomosmultiprocessingsubprocesssocketemailjsondoctestunittestpdbargparsesys
能用标准库解决的问题包括字符串解析、数据序列化、测试、调试、日期操作、邮件、命令行参,还有很多!
Python大量的标准库是它作为一门语言的中流砥柱。

Part题:
填空导入math模块。
```py
______ math
```


8.2 标准库


标准库中有些模块是由Python写成,有些是由C写成。大多数都是跨平台的,但也有些是Windows或Unix专用。
我们不会讲到所有的标准库;原因很简单,模块真的太多了。标准库的全部文档都可以在www.python.org找到。

Part题:
Python自带模块也叫做?
A. 标准库
B. import
C. Unix


8.3 模块(六)


很多第三方Python模块都存储在Python包索引Python Package Index (PyPI)中。
安装这些模块的最好办法就是使用一个叫做pip的程序。它默认会随较新的Python发行版一同安装。如果你没有,直接安装一个也不难。当你有它之后,从PyPI安装模块就变得很简单了。只要知道你想安装的库的名字,打开命令行(Windows是命令提示符),然后输入pip install 库名。完成后,就可以在你的代码中导入使用了。
pip是在多数操作系统上安装库的常规手段,但是有的库有针对Windows的预编译二进制包。这些有用户界面的可执行文件让你像安装其他程序一样安装库。
输入pip命令时要在命令行,而不是Python解释器。

Part题:
PyPI的意思是?
A. Python项目索引Python Project Index
B. Python包安装程序Python Package Installer
C. Python包索引Python Package Index





期末考试


1. 填空定义一个函数,接受两个参数,返回小的那个。
```py
___ min(x, y):
    if x <= y_
  return x
    else:
  ______ y
```


2. 重新排列代码,定义一个函数,计算从0到它的参数的数字之和。
```py
1. def sum(x):
2.   res += i
3.  for i in range(x):
4.  res = 0
5.  return res
```


3. 按照下面方式导入的randint函数应该怎么调用?
```py
from random import randint as rnd_int
```
A. randint
B. rnd_int
C. random.rnd_int


4. 下面代码输出的最大数字是多少?
```py
def print_nums(x):
    for i in range(x):
  print(i)
  return
print_nums(10)
```


5. 下面代码的输出是?
```py
def func(x):
    res = 0
    for i in range(x):
  res += i
    return res


print(func(4))
```



极光creeper
诈尸么
诈尸么
绝对是诈尸吧喂

蛇皮螃蟹怪
看答案啊

soil-sword
让我看看答案吧。

纱夜
root写了什么高级内容 看不懂 我死了

为什么你的命名是lower_letter_with_
另外 分页可能更好?

45gfg9
阴阳师元素祭祀 发表于 2020-1-10 17:28
root写了什么高级内容 看不懂 我死了

为什么你的命名是lower_letter_with_

啥lower_letter_with_

分页不会(

Zapic
就是说,PHP也有份咯(划

nggcgg2
万恶的回复可见!

45gfg9
Zapic 发表于 2020-1-10 18:08
就是说,PHP也有份咯(划


没人有异议我就开php了(

GreyElaina
本帖最后由 Chenwe_i_lin 于 2020-1-11 09:57 编辑

1. def return
2.def sum_(x): return sum(list(range(x)))
3.B
4.9
5.6

顺带 这里的东西不到整个语言能做的事的千分之一
Python的性能真的菜, golang教程来一个好吗秋梨膏

45gfg9
Chenwe_i_lin 发表于 2020-1-11 09:55
1. def return
2.def sum_(x): return sum(list(range(x)))
3.B

兄啊 我能怎么办啊

帖子标题搬运+汉化难道写得不清楚吗
这里是从零学啊 本来就是入门 要千分之第二干啥啊

Golang不会 告辞


这里小雨.
能不能教一下后面的gui界面啊

涼空桐魚
Pywifi不能用了???

Night丶R
能不能教一下后面的gui界面啊