文章目录
1. 函数 input() 的工作原理
大多数程序的宗旨都是为了最终解决用户的问题,
为此通常需要从用户那里获取一些信息。
在 使用python的编程过程中,我们可以利用 input 函数来实现用户录入信息的功能。
我们来看示例:
函数 input() 让程序暂停运行,等待用户输入一些文本。
message = input("请录入信息")
print(message)
函数 input() 中的参数信息,就是程序运行之后,提示给用户的信息。
如图:
虽然只有两行代码,没有什么逻辑。
但是用户依然可以在端口中录入信息。
用户录入信息之后,敲击回车,录入的信息就会存储在变量 message当中,
然后运行到第二行代码,输出打印我们看到的信息,也就是用户录入的 兔C。
1.1 使用 int() 来获取整数类型
int() 函数是为了避免 用input() 函数来接收用户录入整数类型的值时发生的问题。
先写个示例给大家看一下:
message = input("请问您今年贵庚?")
print(message)
如果这样接收用户录入的整数类型,被接收的信息将会是什么类型?
我们输出看一下
输出的接收到的信息是 15,
看不出来是整数还是字符串,那 在和整数类型的值比较一下呢?
message = input("请问您几年贵庚")
print(message)
message >=18
这里都没有在用一次 print输出一下,在运行的结果就会发生类型错误。
想解决这个问题,用int() 函数来接收用户录入的数字信息就可以了。
我们来改一下示例代码:
age = input("请问您的贵庚?")
age = int(age)
print(age)
print(age > 18)
在来看一下 用 int 函数转换 age接收后的信息是否可以进行与数字类型比较。
1.2 % 求模运算符
在编程中,我们也可以进行数学的四则运算。
而在编程中,除数计算想获得计算余数的返回,就需要用到求模运算符。
print(6%4)
例如 6/2 除不尽 有余数,那余数是多少,我们将应该编写的 / 号改为 % 取模。
来看一下是否可以正确返回余数:
1.3 版本问题
这个专栏中的 python 文章,都是基于 3.0+ 的 python 版本的。
如果使用 2.0+的版本,是有区别的,
例如 input() 函数,在 2.0+ 版本中,应该使用的是 raw_input()来提示用户录入。这个函数的功能与3.0+中的input() 函数一样。
当然, 2.0+版本当中也有input() 函数,但它将用户录入的信息解读为 python代码,并尝试运行他们。最好的结果是出现错误。糟糕的是,可能会运行你原本无意运行的代码。
2. while 循环简介
for 循环用于针对集合中的每个元素的一个代码块,而 while循环不断地运行,直到指定的条件不满足为止。
2.1 使用示例
使用 while 循环 数1到5的数字
number = 1
while number <= 5:
print(number)
number+=1
其实逻辑还是我们之前文章讲述过的,没有复杂的逻辑,只要理清新概念的语法实现出来并没有难度。
2.2 利用while循环实现用户选择退出
可以利用while循环来实现让用户在选择不关闭程序的状态下持续运行。
prompt = "请您输入 quit 来确认关闭程序。"
message =""
while message != "quit":
message = input(prompt)
if message !="quit":
print(message)
print('程序已经关闭')
在这段代码中,我们先设置好提示信息和一个空的变量用于接收用户输入的信息并方便循环时判断。进入循环,在 message 这个变量没有接收到quit值时,就不断的循环运行程序。如果用户通过input函数录入 quit值,就将这个值存储到message当中,再下次循环时,程序就会关闭了。
2.3 标志的使用
active = True
prompt = '请您输入 quit 来确认关闭程序。'
while True:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
这次的代码逻辑和2.2中的代码逻辑相同,只不过我们利用了标志来进行判断,而不在是变量当中接收到的字符串值。我们先将标志的初始值设置为 true值,如果标志的值为true就进入到循环当中,在循环中,变量message接收到用户录入的信息,如果接收到的信息为 quit值,就将标志的true值,更改为 false值,结束程序的运行,因为false值,无法进入到下一次的循环当中。
2.4 break 语句
之前的两个实例中,结束程序运行的过程,都会将循环体当中余下的代码也执行完成,如果想跳过后述冗余代码的执行,可以通过 break语句。
break 语句,就是用于控制程序流程。
我们先将上面的代码示例粘下来,然后在 if 语句当中添加进 break
active = True
prompt = '请您输入 quit 来确认关闭程序。'
while active:
message = input(prompt)
if message == 'quit':
break
else:
print(message)
这样加入 break 语句的循环就产生了微妙的变化,当标志为 true 值时,执行循环当中的逻辑,判断用户录入的信息是否为 quit值,就利用 break 语句结束循环的运行。不在执行break后续的代码逻辑。
2.5 continue 语句
break 语句可以理解成结束循环,而 continue 语句可以理解成结束当前次的循环。
我们来写一个示例,循环遍历输出1-10之间的数,
在这个输出过程中,利用 continue 只让其打印奇数。
number = 0
while number < 10:
number+=1
if number % 2 == 0:
continue
print(number)
在这段代码中:
先设置了一个变量,用于存储要计算的数字,数字从0开始,由于0 小于 10,所以进入到循环中,0+1等于1,继续进行if判断,1除以2是否有余数,有余数说明不能被整除,然后输出1,循环继续执行,+1等于2, 2小于10,但是除以2没有余数,说明是偶数,continue结束当前次循环,省略输出,然后循环从头开始…
2.6 避免无限循环
我们近期的文章中,只要用到 循环的地方都设置了合理的条件,如果使用循环时,设置的条件不合乎逻辑就会出现无限循环的情况。
如果你也像我一样使用 Geany 这款编辑器,然后运行测试程序的也是黑窗口,
出现 无限循环的情况 可以按住 Ctrl + C 结束。
在编写程序用到循环的环境中,一定要做好测试,避免无限循环的情况出现,
而出现这种情况,也一定是因为设置的条件不合乎逻辑。
3. 使用 while 循环来处理列表和字典
使用 for循环 遍历列表或者字典不建议修改其中的元素,因为会导致 python 难以跟踪其中的元素,如果想在循环过程中做元素的修改,建议使用 while循环。
3.1 在列表之间移动元素
假设我们用列表存储用户的注册信息,已知被存储的是未注册的信息,因为现在是注册的过程。现在要将这些信息移动到已注册的列表中进行存储,我们可以通过 while来实现:
# 注册信息
user_Info = ['张三','丽思','王五','周六']
# 以注册信息
users = []
while user_Info:
uname = user_Info.pop()
print('当前用户名:'+uname)
users.append(uname)
print('系统正在解析以完成认证用户信息:')
#显示所以已认证用户
for user in users:
print(user)
#显示未认证用户
print('系统正在检查未完成认证用户信息:')
for u in user_Info:
print(u)
3.2 删除包含特定值的所有列表元素
之前我们在 操作for循环时,使用过 remove() 函数来删除过已知内容,
如果现在有一个宠物管理系统,系统中含有很多的 cat值, 要删除所有这些元素,
我们只好利用 while 循环的不断循环特性来操作了。
pets =['cat','dog','goldfish','cat','cat','dog','rabbit','rabbit']
while 'cat' in pets:
pets.remove('cat')
print(pets)
来看一下删除结果:
3.3 使用用户输入来填充字典
#用于存储调查信息的字典
response ={}
#设置标志
active = True
#标志为true值,进入循环
while active:
#寻访问卷人姓名
message = "请问,你叫什么名字?"
#存储问卷人姓名的变量
name = input(message)
# 寻问当前问卷人是否喜欢
value = input("请问"+name + ",您喜欢编程吗?")
# 将询问结果和其姓名存储到字典
response[name] = value
#询问是否还有人愿意参与
repeat = input('请问还有人愿意参与调查问卷吗?(yes/no)')
# 如果不愿意 将标志的值改为 false
if repeat == 'no':
active = False
#遍历字典,输出其存储的信息
print('-- -- -- 本次调查问卷结果信息公布栏 -- -- --')
for key,value in response.items():
print('参与人员:'+key+'\t个人倾向:'+value)
其实代码逻辑很简单,担心文字叙述的话描述的混乱。我将代码逐行进行了注释
下面来给大家测试一下这个调查问卷小功能的效果: