(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419
学了这么久的Python,大家肯定会好奇,不是说机器学习吗?不是人机交互吗?不是人工智能吗?怎么我学了Python都十节课了,还没有写出能和电脑交互的程序?不要着急,第十一节课后,我们学习Python的内容就逐渐变难。当然,从这节课开始,我们将会写一些要求用户输入的一些程序,简称交互式程序。
目录
一、输入函数input()和数据类型转换函数int()
1、input()函数的些许知识
2、int()函数的些许知识
二、while循环
1、while循环讲解及举例
2、在while循环中使用标志
3、break和continue
4、用while循环处理列表和字典
A、在列表之间移动元素
B、删除包含特定值的所有列表元素
C、使用while循环填充字典
一、输入函数input()和数据类型转换函数int()
函数 | 用途 |
input() | 获取用户输入的字符串 |
int() | 将用户输入的数值转换为整型 |
1、input()函数的些许知识
我们接下来编写第一个交互式程序:(我输入的是“I love Python!”(忽略绿色)电脑回复给我的也是这样的一句话。)
# 定义一个变量,存储用户输入的字符串
# input()函数括号内的话将会被打印显示,并期待用户的输入。
message=input("Tell me something, and I will repeat it back to you: ")
print(message)
对上面的代码进行一个解释:函数input()接受一个参数:即要向用户显示的提示或说明,让用户知道该如何做。在这个例子中,Python运行第一行代码时,用户看到提示(让输入一句话),程序等待用户输入,并在用户按回车键后继续运行。输入的字符串存储在变量message中,最后被print()函数输出。
我们学习input()函数之后,就会接触到越来越多的需要用户输入的程序,因此输出一个用户提示信息是有必要的。例如:
name = input("Please enter your name: ")
print("Hello, " + name + "!" )
如果提示超过一行,可以将提示存储在一个变量中,再将该变量传递给函数input()。如此一来,即便提示超过一行,input()语句也非常清楚。例如:
prompt = 'If you tell us who you are,we can personalize the messgaes you see.'
prompt += '\nWhat is your first name? '
name = input(prompt)
print('\nHello,' + name + '!')
上面这个例子演示了一种创建多行字符串的方式,第1行将信息的前半部分存储在变量prompt中,在第2行中,运算符+=将“What is your first name ? ”追加到prompt中
2、int()函数的些许知识
这里我们使用一个例子来引出int()函数:
age = input("How old are you? ") # 提示用户输入用户的年龄
age += 2 # 将用户输入的年龄增加2
print(age) # 输出现在的age
为什么会报错呢?就写了三行代码就报错了?21 + 2 = 23,直接输出23不就好了吗?这就是我文章开头说到的input()函数会将用户输入的内容以字符串的形式保存起来,字符串+2=?,所以编译器会报错。那为了解决这个问题,我们可以用int()函数来进行对用户年龄的获取。改正代码如下所示:
age = input("How old are you? ") # 提示用户输入用户的年龄
age = int(age) # 将用户输入的年龄字符串转换为整形
age = age + 2
print(age) #输出现在的age
除此以外,我们还有其他众多的转换函数,例如float(),我后期也会介绍。在第一节的最后,以求模运算符结束。“%”就是求模运算符,它将两个数相除并返回余数。所以当一个数可被另一个数整除时,余数就为0了,所以我们可以利用%来判断一个数是奇数还是偶数,下面的代码我们就使用了int()函数将用户输入的数值字符串转换为整形,在输出时,我们又使用str()将int型转换为字符串类型,用于输出:
number = input("Enter a number, and I will tell you if it is even or odd: ") # 提示用户输入一个数字,并获取用户的输入
number = int(number) # 将用户的输入转换为数字,整形 if number % 2 == 0: # 判断数字是否为偶数,是的话就输出下面一条语句print("\nThe number " + str(number) + " is even.")
else: # 数字为奇数print("\nThe number " + str(number) + " is odd.")
二、while循环
1、while循环讲解及举例
一看到循环,就想起了之前学过的for循环,那while循环和for循环有什么区别呢?for循环习惯用于遍历集合中的每个元素,而while循环不断地运行,直到不满足指定的条件为止。先举个例子:
number = 1 # 给number初始值
while number <= 5: # 循环语句:number不大于5别想从循环出来 print(number)number += 1
上述代码预先设置了循环的结束条件,那么我们是否可以先让程序运行起来,通过检查用户的输入来决定程序是否要继续?答案是肯定的,要不然我们开始游戏后,如何退出游戏呢?
prompt ="\nTell me something, and I will reapt it back to you: "
prompt += "\nEnter 'quit' to end the program. "
# 以上代码就是多行提示输出的又一例子
message = "" # 将message设置为空的字符串,让编译器首次检验的时候有可供检查的东西
while message != 'quit':message = input(prompt)print(message)
上述2个示例代码在使用while循环时,都使用了条件判断,第一个是number不大于5就一直循环,第二个是只要用户不输入“quit”,程序就一直运行。那之前学的if条件语句中的检验多个条件的方法在这里还是否适用呢?我们改写一下第二个示例代码,让用户在输入quit和exit中的任何一个时才退出程序:
prompt ="\nTell me something, and I will reapt it back to you: "
prompt += "\nEnter 'quit' or 'exit' to end the program. "
# 以上代码就是多行提示输出的又一例子
message = "" # 将message设置为空的字符串,让编译器首次检验的时候有可供检查的东西
while (message != 'quit' and message != 'exit'):# 加不加括号都一样message = input(prompt)print(message)
细心的同学可能就发现了,谁退出游戏时,点了退出还会显示“退出游戏”四个字。我们可以使用if条件语句,如果输入的是“quit”或者“exit”就打印了。
2、在while循环中使用标志
上述让程序是否继续的条件有两个,那么有多个时,我们将会如何组织代码,使其更加简约易读呢?那就是使用标志。在要求很多条件同时满足才能继续运行的程序中,我们可以定义一个变量,用于判断整个程序是否还处于活动状态。这个变量被称为标志,也就是这个程序的信号灯:可以让程序在标志为True时继续运行,并在任何事件导致标志的值为False时让程序停止运行。如此一来,在while语句中就只需要检查一个条件,把全部测试放在其他地方,进而达到代码美观、易读、功能还完整的目的。我们还以输入“quit”结束的那个程序为例:
prompt ="\nTell me something, and I will reapt it back to you: "
prompt += "\nEnter 'quit' or 'exit' to end the program. "
# 以上代码就是多行提示输出的又一例子active = True
while active: # 表示当active为True时,就循环message = input(prompt) # 让用户输入字符串if message == 'quit': # 如果用户输入quitactive = False # 改变标志的状态else: # 否则还是输出messageprint(message)
假设,我们把“如果用户输入的是exit,也退出程序”转变为代码加进去,只需要在if语句下增添elif语句即可。由此可见,这段程序的可扩展性还是比较强的。
3、break和continue
Python里的break和continue与C语言里的break和continue是一样的:
break:要立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break语句。
continue:返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句。举例如下:
prompt = "\nPlease enter the name of a city you have visited: "
prompt += "\n(Enter 'quit' when you are finished.)"while True:city = input(prompt)if city == 'quit':breakelse:print("I would love to go to " + city.title() + "!")
注:在任何Python循环中都可使用break语句。例如可以使用break语句来退出遍历列表或字典的for循环。
current_number = 0
while current_number < 10:current_number += 1if current_number % 2 ==0:continueprint(current_number)
建议:每写一个循环语句都要格外注意,避免死循环、避免缩进问题。如果不小心掉进了死循环,那么可以使用“Ctrl+C”或关掉终端窗口来结束死循环的程序。
4、用while循环处理列表和字典
我们之前学过使用for循环对列表、字典进行增删改查,现学的while同样也可以完成上述操作。for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while循环。通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。
A、在列表之间移动元素
问题情景:A列表包含新注册但还未验证的网站用户,验证这些用户后,将他们移到另一个已验证用户列表中:
# 首先创建一个待验证用户列表以及一个用于存储已验证用户的空列表
unconfirmed_users = ['alice','brian','candace']
confirmed_users = []
# 使用while循环验证每个未验证的用户,直到没有为止
# 验证一个用户之后立马将其追加到已验证用户的列表里
while unconfirmed_users:current_user = unconfirmed_users.pop()print("Verifying user: " + current_user.title())confirmed_users.append(current_user)
# 显示所有已验证的用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:print(confirmed_user)
细心观察,三个人的名字在两个列表间实现了移动,他们之间的相对位置也发生了变化,这是因为使用了pop()方法(从第一个列表的末尾开始删除用户,append()方法增加用户时又将刚刚弹出的用户增加到列表的第一个位置)
B、删除包含特定值的所有列表元素
在前面的课程中,我们学习了remove()方法来删除列表中的特定值,这种方法只适合待删除元素在列表中只出现一次的情况。如果待删除元素在列表中出现多次,那么就得借助while循环语句。例如:
要删除列表中所有的“cat”
pets = ['dog','cat','dog','goldfish','cat','rabbit','cat']
print(pets)
while 'cat' in pets:pets.remove('cat')
print(pets)
有人就说用一个for循环代替while循环也能实现。实现是绝对没问题的,但是具体过程还是有很大区别的:while循环是只要发现列表里还有“cat”(发现的过程似乎是遍历一次列表),就继续循环,执行remove(),也就是说针对上面代码举的例子,while循环代码至少遍历列表三次(因为有三个cat);而for循环是按照列表中的元素一个一个找过去,是“cat”就删掉,不是就继续循环,直到列表末尾。(for循环只遍历了一次列表)(以上是我个人看法,欢迎指正)
C、使用while循环填充字典
for循环可以对字典进行“增”,while循环也不甘示弱。例如下面一段调查信息的程序:
responses = {}# 设置一个标志,指出调查是否继续
polling_active = Truewhile polling_active:#提示输入被调查者的名字和回答name = input("\nWhat is your name? ")response = input("which moutain would you like to climb someday? ")# 将答卷存储在字典中responses[name] = response# 看看是否还有人要参加调查repeat = input("Would you like to let another person respond?(yes/ no) ")if repeat == 'no':polling_active = False
# 调查结果,显示结果
print("\n--- Poll Results ---")
for name,response in responses.items():print(name + " would like to climb " + response + ".")
如果忘记了字典的增删改查,就复习一下,尤其是items(),容易被遗忘。