目录
零、用户输入
在说 if 语句那部分时,最后有一个判断闰年的案例用到了用户输入,但只是简单提了一下,今天详细讲讲这部分的内容。
input() 的工作原理
函数 input() 会让程序暂停运行,并等待用户输入一些文本。获取用户输入后,python 将其赋值给一个变量,以便后续使用。
name = input("please input your name:")
print(f"Hello {name},have a good time")
结果:Sublime Text 不能运行提示用户输入的程序。你仍可以用它来写代码,但是必须得从终端运行。
input() 会接受一个参数用来向用户提示该输入什么东西,程序运行到第一行时,屏幕会打印 please input your name: ,然后等待用户输入,用户输入后按下回车,程序将用户输入的内容赋值给变量 name ,然后在执行第二行代码。
获取数值输入
现在仔细想一下,我们上例中获得的 name 格式是什么呢?这个问题挺简单的,应该都能想到是字符串
>>> name = input("please input your name:")
please input your name:vegetable
>>> type(name)
<class 'str'>
程序先等待用户输入,然后把输入值 vegetable 赋值给 name,此时 name 的类型是 str ,也就是字符串,但是如果我们输入的是一个数字,它会是什么类型呢?
>>> age = input("please input your age:")
please input your age:18
>>> type(age)
<class 'str'>
我们可以看到,计算机好像也并没有那么聪明,它把我们输入的年龄 18 作为字符串处理了。
所以我们想要获取用户输入的数值时,必须要进行强制类型转换。
你可以这样写
age = input("please input your age:")
age = int(age)
当然,你也可以这样写
age = int(input("please input your age:"))
你用 int() 得到的类型就是 int,如果你用 float() ,那么得到的就是 float()
>>> age = int(input("please input your age:"))
please input your age:18
>>> type(age)
<class 'int'>
简单案例——餐厅定位
询问用户有多少人,如果超过 8 位(包含 8 位),就告知没有空桌;否则告知有空桌
num = input("Please tell us how many of you are coming: ")
num = int(num)
if num >= 8:
print("Sorry, we have no free tables")
else:
print("We have some free tables,you can book now")
结果:
壹、while 循环
之前我们说过 for 循环,而今天要讲讲 while 循环。
while 循环的使用
num = 0
while num < 5:
num += 1
print(num)
结果:这个程序打印了 1,2,3,4,5
接下来,我们看看这个程序为什么打印了 1,2,3,4,5
首先,给变量 num 赋值为 0,然后进入 while 循环,意思为在 num < 5 时,一直执行循环体中的内容。
进入循环体,首先让 num 自增 1,num += 1 就是 num = num + 1,自增后,打印 num ······
直到条件不满足时,跳出循环
无限循环
很好理解,就是 while 后的条件永远为真,永远能执行下去。
x = 1
while x < 5:
print(x)
x += 1
比如上述的代码如果不小心遗漏了 x += 1 就会进入一个无限循环,因为条件永远为真,只能使用 Ctrl + C 退出。
贰、while 循环处理列表和字典
for 循环遍历列表十分方便,但不应该在 for 循环中修改列表,否则将导致 python 很难追踪其中的元素。
在遍历列表的同时对其进行修改,可以使用 while 循环。while 循环与列表和字典结合使用,可以收集、存储并组织大量输入。
在列表间移动元素
我们有两个列表,一个是未验证过的学生,验证完这些学生,需要将他们移动到另一个已验证学生表中
unconfirmed_stus = ['amy','tony','bruce']
confirmed_stus = ['lisa','vegetable']
while unconfirmed_stus:
ing_stu = unconfirmed_stus.pop()
confirmed_stus.append(ing_stu)
for confirmed_stu in confirmed_stus:
print(confirmed_stu)
结果:
回头看代码,有两个列表,一个是未确认学生列表,一个是已确认学生列表
while 循环中会不断运行,知道 unconfirmed_stus 表中没有元素,pop() 是从列表末尾删除一个元素,也就是将未确认学生从未确认列表中删除,并且赋值给 ing_stu,然后在使用 append() 在列表末尾增加一个元素,也就是将 ing_stu 添加到已确认学生列表末尾。最后在使用 for 循环遍历已确认学生列表。
删除列表中为特定值的元素
之前提过,remove() 只能删除列表中第一次出现的特定元素,今天讲讲怎么一次性删除所有特定元素
fruit = ['apple','apple','peach','pear','apple']
print(fruit)
while 'apple' in fruit:
fruit.remove('apple')
print(fruit)
结果:
使用 while 循环遍历 fruit 列表,并且用 remove() 按值删除特定元素 ‘apple’
使用用户输入来填充字典
我们试着做一个问卷调查,并将结果保存到一个空字典中
results = {}
while 1:
name = input("\nWhat's your name? ")
response = input("\nWhat do you want to eat? ")
results[name] = response
repeat = input("\nWould you like to let another person respond?(yes or no) ")
if repeat == 'no':
break
else:
continue
for name,food in results.items():
print(f"{name} wants to eat {food}")
结果:第一行,我们定义了一个空字典 result,然后写了一个死循环,name 和 response 都是用户输入的内容,并且在下一行 result[name] = response 中,我们让 name 作为字典的键,response 作为字典的值,从而构成一对键值对,之后让用户输入 yes 或 no 赋值给 repeat ,并在最后用 if 语句控制,repeat 的值是 no 时,我们直接退出循环,是 yes 时,我们就继续,最后使用 for 循环遍历字典,并打印
叁、小结
今天的任务终于完成了,每天完成一部分,那很长时间后就会还有很大的收获,就好像拼积木一样,一块一块的搭起来,到最后就有了很雄伟又很完美的作品,说到积木,就想到我的名字,jim_vegetable,jim 和积木同音,希望自己能够像拼积木一样学习想学的知识,一点一点的积累,直到最后呈现出作品;vegetable 自然不用说了,因为自己菜,就是因为菜所以才要学习,越学习越觉得自己知道的太少了,越觉得自己菜。哈哈哈,就这样一直菜下去吧。加油!