1.输入
这一章在书里作为单独的一章,还是比较简单的。对于输入主要需要掌握input(),这个函数在接收输入时,还可以输出提示信息。如:
name = input("Please enter your name: ")
print("Your name is "+name.title()+'.')
这段程序会首先打印出Please enter your name: ,在用户输入名字,按下回车后打印出他的名字。如果要输出的内容比较长,或是跨行,也可以将这段字符串存储在变量里,如
prompt = "Hello!"
prompt+= "\nPlease enter your name: "
name = input(prompt)
print("Your name is "+name.title()+'.')
就可以输出两行提示信息,输出结果为:
Hello!
Please enter your name: alan
Your name is Alan.
2.while循环
首先可以尝试输出数字1-5,这里先使用过去的方法,使用for循环和函数range,如下:
for value in range(1,6):
print(value)
最终会输出数字1-5,如下:
1
2
3
4
5
当使用while循环时,应为
value = 1
while value <= 5:
print(value)
value += 1
这段代码同样可以输出数字1-5,输出的结果与上面相同。在Python的while循环里,continue和break依然可以使用。
接下来是使用while循环处理列表和字典的例子。使用for循环也可以遍历列表,但却不容易对列表进行修改,当要修改列表里的内容时,可以使用while循环。这里书上列举了三种情况。
①在列表间移动元素
打比方如有两个列表,旧的列表存储需要完成的任务,新的列表存储已经完成的任务,现需要将旧列表中的任务逐个完成,将其从列表中提取出来,加入新的列表中。
todolist = ['a','b','c','d','e']
completedlist = []while todolist:
task = todolist.pop()
print("task "+task+" has been completed.")
completedlist.append(task)print(todolist)
print(completedlist)
输出结果为:task e has been completed.
task d has been completed.
task c has been completed.
task b has been completed.
task a has been completed.
[]
['e', 'd', 'c', 'b', 'a']
从输出可以看出,旧列表中的元素已经完全移入新的列表中。这里用到了列表的两个方法append()和pop(),使用while当旧列表不为空时,将元素取出来,移到新的列表里。
②删除包含特定值的所有元素
当特定值在列表中有多个时,可以使用while循环来进行处理,如
todolist = ['a','b','a','d','e','a']
while 'a' in todolist:
todolist.remove('a')print(todolist)
通过while循环不断地找出列表里的‘a’,并进行删除,最终的列表里只剩b,d,e,如下
['b', 'd', 'e']
这种方法也是书上的方法,我使用for语句同样达到了目的,可以进行参考,最终输出的结果与上面一致
todolist = ['a','b','a','d','e','a']
for task in todolist:
if task == 'a':
todolist.remove('a')print(todolist)
③使用用户输入填充字典
这种情况是使用while语句向字典中加入用户输入的内容。
如
friends = {}
flag = True
while flag:
name = input("Please enter your name: ")
color = input("Please enter your favorite color: ")
friends[name.title()]=color
prompt = input("Someone else?(Y/N)")
if prompt == 'N' or prompt == 'n':
flag =False
elif prompt == 'Y' or prompt == 'y':
continue
else:
print("Please enter 'Y' or 'N'.")
break
print(friends)最终输出为:
Please enter your name: alan
Please enter your favorite color: red
Someone else?(Y/N)y
Please enter your name: bob
Please enter your favorite color: blue
Someone else?(Y/N)n
{'Alan': 'red', 'Bob': 'blue'}
这里用到了if-elif语句,用到了continue,也用到了or,最终将用户输入的名字和颜色填入字典中。这个程序还可以进行优化,当询问是否再添加人物时,如果输入了Y或N之外的内容,需要有相应的处理机制。这里我加入了一个新的标志(flag),并嵌套了一个while循环,代码如下:
friends = {}
flag = True
while flag:
loopflag = True
name = input("Please enter your name: ")
color = input("Please enter your favorite color: ")
friends[name.title()]=color
while loopflag:
prompt = input("Someone else?(Y/N)")
if prompt == 'N' or prompt == 'n':
flag =False
loopflag = False
elif prompt == 'Y' or prompt == 'y':
loopflag = False
continue
else:
print("Please enter 'Y' or 'N'.")
loopflag = True
print(friends)
最终输出结果与预想的一致:
Please enter your name: alan
Please enter your favorite color: red
Someone else?(Y/N)a
Please enter 'Y' or 'N'.
Someone else?(Y/N)b
Please enter 'Y' or 'N'.
Someone else?(Y/N)y
Please enter your name: bob
Please enter your favorite color: blue
Someone else?(Y/N)n
{'Alan': 'red', 'Bob': 'blue'}
这里的循环标志(loopflag)一定要放入外循环内才可以,不然当添加完成后,将loopflag的值改为false,就再也不会进入内循环了。