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,就再也不会进入内循环了。