【Hello Python World】Class Notes of Week 4

用户输入和while循环(3.28 update)

1.split()方法使得整行输入变得合法

a = int(input("Enter a:"))
b = int(input("Enter b:"))
print(a+b)

输入 3 5

注意!如果是a = input(),输入的时候记得加双引号""
报错!C++分割输入以空格或回车分割不同,Python的输入是整行输入的(),那要如何使得输入能做到像C++呢?

-

思考1:是否可以像print()一样指定后缀?

a = int(input("Enter a:", end = ' '))

不可以,Python没有提供这种做法

-

使用字符串的split()方法

L = input().split()
a = int(L[0])
b = int(L[1])
print(a + b)
#输入 5 3

输出 8, 这样是可以的

2.split()方法

split()的第一个参数可以指定分隔符,默认以空格为分隔符

li = [int(val) for val in "3,5, 13".split(',')]
print(li)
s = sum(li)
print(s)
输出:
['3', '5', ' 13']
21

注意,第一个输出中,13前的空格被加进去了
int(' 13') = 13 因为int()过滤空格

split()的第二个参数指定将字符串切多少刀

"1,3,5,7".split(',', 2)
#输出: ['1', '3', '5,7']

切了2刀之后后面的就不去管他了

split()list()结合

L = [int(val) for val in input("Enter some numbers:").split()]
print(L)
#得到一个新的整数列表

3. Python中的while不加括号

while True: #在Python中注意布尔常量要大写,不然会被当做普通变量
    name = input("Enter your name, and enter 'Quit' to quit: ")
    if name == 'Quit'
        break #continue 也是有的
    print("Hello World!")

Python中的whileC++中的很像

删除某个元素直至元素不在列表中

names = ['A', 'B', 'C', 'A']
while 'A' in names:
    names.remove('A')
print(names)
#输出 ['B', 'C']

4.杂碎

Python中也有%取模的方法

Python中不支持i++++i操作,需要用i = i + 1来代替

5.Python中的函数定义

def fun(argument1, argument2, argument3,…):

6.函数缺省的方向:

def fun(a, b=0): #对的
def fun(a=0, b): #错误

7.函数参数的匹配规则:

def fun(a, b=1, c=2):
    ...
fun(2, 3)
#等价于fun(2, 3, 2)

8.Python的“变参”:通过设置默认值来实现

def avg(math, chinese, english = -1):
    if english == -1:
        return (math + chinese) / 2
    else:
        return (math + chinese + english) / 3

9.函数可以一次返回多个值,默认的组合格式是元组

def mul(x, y, k):
    return x*k, y*k

print(mul(2,3,4))
#输出 (8, 12)

x,y = mul(2,3,4)
print(x)
print(y)
#输出
#8 
#12

10.Python传进任意多个参数

对于任意多个单变量参数,*标记的变量即为任意参数变量,可以直接看成是一个可以接收任意个参数的列表

def avg(k, *nums):
    ...
#调用
avg(2,1,2,3)
#其中后三个数字属于*nums的内容

def avg(*nums, k):
    ...
#下面的调用方法是错误的,因为任意数量参数没有靠右边,而且调用时没有指出谁是k以此来区分
avg(2,1,2,3)
#下面的调用方法是正确的,使用靠右的关键字显式指出谁是k
avg(3,2,1,k=3)
#下面两种调用都是错误的,因为显式的关键字只能靠右,和缺省值的形式相同
avg(3,2,k=1,2)
avg(k=3,2,1,2)

对于任意多个键值对变量参数,**标记的变量即为任意参数变量,可以直接看成是一个可以接收任意个参数的字典

def avg(k, **score):
    ...
#调用
avg(2, 'math'=80, 'chinese'=70)
#其中后三个数字属于*nums的内容

def avg(**scores, k):
    ...
#它的使用和k的显式设置和单变量情形道理相同

11.函数传参数中是按引用传递还是按值传递?

取决于变量的类型,字典列表是会变的(按引用传递),其他变量类型是不同步的,函数内改了之后函数外的不变。

Python不能强行按引用传递,对于不能同步的类型就是不能同步,解决的方法是通过返回值实现

为什么?因为C++中没有这种返回多个值的操作但有按引用传递,在Python中没有按引用传递,相应的补偿就是可以返回多个值

防止函数修改列表的方法:参数设置的时候在列表名后面加上切片符[:](尽量不要这么做除非必要,因为开销很大)

12.协作:编写调用自己的函数库

有了一个functions.py,现在有一个main.py要调用它的函数fun()

#可用的方法1
inport functions
functions.fun()

#可用的方法2
import functions as f
f.fun()

#可用的方法3
from functions import fun
#这样把当成是自己文件里定义的,可以不用带前缀,暴力一点,比如下面
from functions import *
#这样做也有缺点,如果本模块里也有一个重名的函数`fun()`那么会报错

猜你喜欢

转载自blog.csdn.net/u013159381/article/details/79693822