7.用户输入和while循环
7.1函数input()
函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。
在使用函数input()时,都应指定清晰而易于明白的提示。
在提示可能超过一行后,可以将提示存储在一个变量中,再将该变量传递给函数input()。
其中,运算符+=表示在prompt中字符串末尾附加一个字符串。
7.1.1int()获取数值输入
函数int()将字符串转为数值,有利于比较。
7.1.3求模运算
运算符: %
显示一个数除以另一个数的余数是多少。判断奇偶。
7.2while循环
1 prompt = 'Tell me something, and I will repeat it back to you: ' 2 prompt += "\n Enter 'quit' to end the program" 3 message = '' 4 while message != 'quit': 5 message = input(prompt) 6 print(message)
其中:message = ' '
将变量message的初始值设置为空字符串:‘ ’,让Python首次执行代码时可以有可供检查的东西。如果没有,那么该程序就无法执行下去。
使用标志来充当判断条件:
在要求很多条件都满足才能继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为:标志。
你可让标志为True时继续运行,并在任何事件导致标志为False时让程序停止运行。
1 prompt = 'Tell me something, and I will repeat it back to you: ' 2 prompt += "\n Enter 'quit' to end the program " 3 4 active = True 5 while active: 6 message = input(prompt) 7 if message == 'quit': 8 active = False 9 else: 10 print(message)
7.2.4使用break退出循环
不在执行余下循环
1 prompt = 'Tell me something, and I will repeat it back to you: ' 2 prompt += "\n(Enter 'quit' to end the program) " 3 4 while True: 5 city = input(prompt) 6 7 if city == 'quit': 8 break 9 else: 10 print("I'd like to go to "+ city.title()+'!')
7.2.5在循环中使用continue
continue语句在条件满足时返回到循环开头,重新循环。
e.g输出10以内的所有奇数。
1 current_number = 0 2 while current_number <= 10: 3 current_number += 1 4 if current_number % 2 == 0: 5 continue 6 print(current_number)
7.3使用while循环来处理列表和字典
使用for循环修改列表会导致python难以跟踪其中的元素。
使用whlie循环可以在遍历列表的同时对其进行修改,可收集、存储并组织大量输入,供以后查看和显示。
7.3.1在列表中移动元素
应用场景:将验证用户移动到已验证用户列表。
1 unconfirmed_users = ['alice','brain','candance']#创建一个待验证的用户列表 2 confirmed_users = []#创建存储已验证用户列表 3 4 #循环验证用户,直到没有用户为止 5 #将经过验证的用户移动到已验证列表 6 while unconfirmed_users: 7 current_user = unconfirmed_users.pop() 8 9 print('Verfying users: '+ current_user.title()) 10 confirmed_users.append(current_user) 11 12 #显示所有已验证的用户 13 print("\nThe following users have been confirmed: ") 14 for confirmed_user in confirmed_users: 15 print(confirmed_user.title())
Verfying users: Candance Verfying users: Brain Verfying users: Alice The following users have been confirmed: Candance Brain Alice
7.3.2删除包含特定值的所有列表元素
remove()删除列表中所有的特定值
1 pets = ['dogs','cat','dog','goldfish','cat','rabbit','bird'] 2 print(pets) 3 4 while 'cat' in pets: 5 pets.remove('cat') 6 7 print(pets)
7.3.3使用用户输入扩充字典
应用场景:创建一个调查程序,其中的循环每次执行时都提示输入被调查者的名字和回答。我们将收集的数据存储在一个字典中,以便将回答同被调查者关联起来。
1 responses = {} 2 3 polling_active = True#设置一个标志,指出调查是否继续 4 5 while polling_active:#提示输入被调查者的名字和回答。 6 name = input("What's your name? ") 7 response = input("Which mountain would you like to climb someday? ") 8 9 responses[name] = response#存储在字典中 10 11 repeat = input("Would you like to let another person response? (yes/no)") 12 #设置退出机制 13 if repeat == 'no': 14 polling_active = False 15 16 print("\n----Polling Results----") 17 for name,reponse in responses.items(): 18 print(name+' would like to climb '+response + '.')
8.函数
是带有名字的代码块,用于完成具体的工作。
8.1定义函数
使用关键字def
使用文档字符串来注释,用三引号括起,Python使用它们来生成有关程序中函数的文档。
1 def greet_user(): 2 """显示简单的问候语""" 3 print('Hello!') 4 5 greet_user()
8.1.1传递函数
1 def greet_user(name): 2 """显示简单的问候语""" 3 print('Hello!'+name.title()) 4 5 greet_user('Fuhai Gao')
8.1.2实参和形参
传递方式:
位置实参,基于实参的顺序,所以实参的顺序很重要。
关键字实参,与顺序无关,但要指定函数定义中的形参名。
默认值:在调用时,如果给形参提供了实参,Python则调用实参值,不然就使用默认值。一般将有默认值的形参排在列表后边,方便正确解读位置实参。
8.3返回值
1 def get_formatted_name(first_name,last_name): 2 """返回整洁的姓名""" 3 full_name = first_name +' '+ last_name 4 return full_name 5 6 musi = get_formatted_name('Gao','Fuhai') 7 print(musi)
8.3.2让实参变成可选的
可以给形参一个空字符串,并将其移到形参列表的末尾。
1 def get_formatted_name(first_name,last_name,middle_name = ''): 2 """返回整洁姓名""" 3 if middle_name: 4 full_name = first_name +' '+middle_name+' '+ last_name 5 else: 6 full_name = first_name +' '+ last_name 7 return full_name 8 9 musi = get_formatted_name('Gao','Fuhai') 10 print(musi)
8.3.3返回字典
1 def build_person(first_name,last_name,age = '' ): 2 person = {'first':first_name,'last':last_name} 3 if age: 4 person['age'] = age 5 return person 6 7 8 musician = build_person('jimi','hendrix') 9 print(musician)
其中,我们在字典中新增了形参age,并将其默认值设置为空字符串,使其具有可选性。
8.3.4结合使用函数和while循环
1 def get_formatted_name(first_name,last_name): 2 """返回整洁的姓名""" 3 full_name = first_name +' '+ last_name 4 return full_name 5 while True: 6 print("\nPlease tell me your name") 7 print("(enter 'q' at any time to quit)") 8 9 f_name = input('first_name') 10 if f_name == 'q': 11 break 12 l_name = input('last_name') 13 if l_name == 'q': 14 break 15 16 formatted_name = get_formatted_name(f_name,l_name) 17 print("\nHello,My name is "+formatted_name+'!')