用户输入和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中的
while
和C++
中的很像
删除某个元素直至元素不在列表中
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()`那么会报错