while循环补充
循环语句参考
在Python中,while循环还可以和else搭配使用,这和其它大多数编程语言都是不相同的地方。请看下面的例子:
count = 0
while count < 10:
print(count)
count += 1
else:
print("else:", count)
打印结果如下:
关于while循环的一个简单登录次数控制例子
print("task1 总共三次登陆机会,如果三次都没有登陆成功,给一个提示,如果登录成功,也需要给一个提示...")
print("提示:用户名是root,密码也是root...")
count = 3
while count > 0:
name = input("请输入用户名:")
password = input("请输入密码:")
if name=="root" and password=="root":
print("恭喜您登录成功!")
break
count -= 1
else:
print("很遗憾,您已经尝试三次都没有登陆成功,程序退出!")
File文件操作
我们可以使用open函数打开一个文件
open函数的默认打开文件的方式是只读的,也就是说不可以向文件中写入数据的。
来看一个例子:
>>> f = open("demo.txt")
>>> f.readlines()
['hello Python\n', '你好 Python\n']
>>> f.writelines("1111")
Traceback (most recent call last):
File "<pyshell#102>", line 1, in <module>
f.writelines("1111")
io.UnsupportedOperation: not writable
从错误原因上面,我们可以得知,f是不可写的,原因就是我们默认的是以只读方式打开的文件。
如果我们以写的方式打开呢?
>>> f = open("demo.txt", "w")
>>> f.writelines("1111111111 hhjhj")
>>> f.readlines()
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
f.readlines()
io.UnsupportedOperation: not readable
此时又出现了不可写的错误,并且当我们用记事本打开demo.txt文件时,发现里面什么内容也没有了。这说明”w”表示创建一个新的文件,如果存在,则清空里面的内容。
上面登录次数练习的升级
我们通过文件里面的用户名和密码和用户输入的用户密密码进行比对,如果相等则登陆成功,如果不相等,则登陆失败!
文件demo.txt里面的内容如下:
admin admin
aaa aaa
demo demo
root root
xxxx xxxx
代码如下:
mylist = []
index = 0
bSuccess = False
f = open("demo.txt")
for lineText in f.readlines():
lineText = lineText.replace("\n", "")
mylist.append(lineText.split(" "))
f.close()
count = 3
while count > 0:
name = input("请输入用户名:")
password = input("请输入密码:")
for i in range(len(mylist)):
if name == mylist[i][0] and password == mylist[i][1]:
print("恭喜您登录成功!")
bSuccess = True
break
count -= 1
if bSuccess:
break
else:
print("很遗憾,您已经尝试三次都没有登陆成功,程序退出!")
dict字典
字典和list差不多,都是可以存储任意数据类型,它是以键值对的方式存储和查找的,键和值之间是以英文字符分号”;”来隔开的。
参考资料
我们可以使用下面的方法判断是否有我们要找的键值。
>>> mydict = {1:'a', 2:'b'}
>>> 1 in mydict
True
>>> 3 in mydict
False
使用dict我们可以完成一个班级花名册,根据输入的名字可以找到这个学院对应的信息。
f = open("roster.txt")
mydict = {}
while True:
strText = f.readline()
if strText == "":
break
strArray = strText.split(":")
strName = strArray[0]
strInfo = strArray[1];
strInfo = strInfo.replace("\n", "")
strInfo = strInfo.replace(" ", "")
strName = strName.replace(" ", "")
mydict[strName] = strInfo
f.close()
print("导入成功,请输入姓名进行查询,输入exit结束")
while True:
print("如果要退出程序,请输入exit")
strInput = input("请输入姓名来查询对应的学员信息:")
if strInput == "exit":
print("程序退出")
break
else:
if strInput in mydict:
print(mydict[strInput])
else:
print("您输入的姓名不存在!请重新输入...")
set
dict返回的既不是元组,也不是list,而是一个set!我们来看一个例子
>>> mydict = {1:'a', 2:'b', 3:'c', 2:'d'}
>>> mydict
{1: 'a', 2: 'd', 3: 'c'}
>>> myset = set([1,1,2,2,3,3,4,4,5,5,6,6,7,7,7,7,7])
>>> myset
{1, 2, 3, 4, 5, 6, 7}
从上面的例子可以看出,dict返回的其实就是一个不重复是我集合(set)。
函数
函数其实就能够完成某一些特定的功能。
Python中函数的定义和使用如下所示:
>>> def myfunc(x, y):
print(x, y)
>>> myfunc(10, 20)
10 20
>>> myfunc("I Love", "Python!")
I Love Python!
从上面可以看出,函数的参数是没有类型的,这既是一个好事,又是一个坏事,好事是方便,坏事是油方便造成的不方便。
请看下面的例子:
def myfunc(x, y):
y = x/2
print(y)
myfunc(1, 2)
myfunc("123", 2)
#结果如下
0.5
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\py.py", line 6, in <module>
myfunc("123", 2)
File "C:\Users\Administrator\Desktop\py.py", line 2, in myfunc
y = x/2
TypeError: unsupported operand type(s) for /: 'str' and 'int'
如果我们要是想写的完善一些,我们就需要增加判断的语句。
def myfunc(x, y):
if not isinstance(x, int):
print("错误参数!")
else:
y = x/2
print(y)
myfunc(1, 2)
myfunc("123", 2)
#结果如下:
0.5
错误参数!
当然了,我们的函数还是能够有返回值的:
def myfunc(x, y):
if not isinstance(x, int):
print("错误参数!")
return 0
else:
y = x/2
print(y)
return y
res = myfunc(1, 2)
print(res)
res = myfunc("123", 2)
print(res)
#结果如下:
0.5
0.5
错误参数!
0
我们有的时候可能需要返回的值不只一个,那么我们该怎么办呢?
虽然可以返回多个数值,但是我们并不推荐这样使用,返回一个list我们倒是觉得更好。
def myfunc(x, y):
if not isinstance(x, int):
print("错误参数!")
return 0, 0
else:
y = x/2
print(y)
return x, y
res1, res2 = myfunc(1, 2)
print(res1, res2)
res1, res2 = myfunc("123", 2)
print(res1, res2)
#结果如下:
0.5
1 0.5
错误参数!
0 0
Python中的函数也可以支持默认参数
def myfunc(x=0, y=0):
if not isinstance(x, int):
print("错误参数!")
return -1, -1
else:
y = x/2
print(y)
return x, y
res1, res2 = myfunc(1)
print(res1, res2)
res1, res2 = myfunc("123", 2)
print(res1, res2)
#结果如下:
0.5
1 0.5
错误参数!
-1 -1