Python学习(六)用户输入和while循环

本文介绍了Python中input()函数的工作原理,包括如何获取用户输入及转换数值类型。接着讲解了while循环的基本用法,如如何使用while True创建无限循环,以及如何通过break和continue控制循环流程。此外,还展示了如何在while循环中处理列表和字典,包括移动元素、删除特定值以及填充字典。文章强调了避免无限循环的重要性,并提供了实际示例帮助读者理解。
摘要由CSDN通过智能技术生成

用户输入和while循环

1.函数input()的工作原理

函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后。Python将其存储到一个变量中。

name = input("What's your name?")
print ("Hello " + name.title())

结果

What's your name?"dana"
Hello Dana

函数input()接收一个参数,即要向用户显示的提示或者说明,让用户知道该如何做。在这个示例中,Python运行第一行代码的时候,用户将看到提示What’s your name?。程序等待用户输入,并在用户回车后继续运行。输入的"dana"被存储在name这个变量中。接下来将输出呈现给用户。

1.1 使用int获取数值输入

使用函数input()时,需要注意的一点是,当你想要输入字符串的时候要显示的告诉Python你输入的是字符串。也就是需要""。下面来对比一下正确和错误的使用

age = input("How old are you?")
print ("age:" + str(age))

结果

How old are you?16
age:16

函数str()是把其他类型转换为字符串类型。在这里把int类型的16转换为了字符串的16。如果不进行转换会出现什么情况呢?

age = input("How old are you?")
print ("age:" + age)

结果

How old are you?16
Traceback (most recent call last):
  File "hello_python.py", line 2, in <module>
    print ("age:" + age)
TypeError: cannot concatenate 'str' and 'int' objects

Python解释器会提示不能把字符串类型和整形进行拼接。

那反过来如何把字符串类型的数字转换为整形呢?接下来看一下错误示例,这在编写代码时也是经常粗心犯的错误。

age = input("How old are you?")
print (16 == age)

结果

How old are you?"16"
False

这个输入的是"16",为什么和程序中的16不相等呢?答案就是我输入的是字符串类型的16,而和它比较的是整形的16.所以它俩并不相等。

age = input("How old are you?")
print (16 == int(age))

结果

How old are you?"16"
True

在这里,输入了字符串类型的16。但是在比较的时候,先将age变量存储的"16"转换为了整形的16。这样比较它俩就是相等的了。这有些类似有java语言中的强类型。但是在Python中,变量是不需要声明类型的。这一点很方便。但是再使用的时候,也需要特别注意。

1.2 求模运算

处理数值信息时,求模运算符(%)是一个很有用的工具,也就是两个数相除并返回余数。

print 4 % 3
print 5 % 3
print 10 % 2
print 11 % 2

结果

1
2
0
1

可以看到,在使用print()函数时,省略了括号,这也是准许的,在今后的代码中都将省略print()函数的括号。

求模运算符不会指出一个数是另一个数的多少倍,而只是指出余数是多少。

2.while循环简介

for循环用于针对集合中的每个元素的一个代码块,而while循环不断的运行,直到指定的条件不满足位置。

2.1 使用while循环

下面是一个简单的while循环示例

number = 1
while number < 10:
    print number
    number += 1

结果

1
2
3
4
5
6
7
8
9

上述代码在第一行声明了变量number 为1。接下来定义while循环代码块,首先判定变量number是否小于10,如果小于10,那么进入循环体,接下来打印当前变量number的值,最后然number所指代的值进行加一操作。然后再判定变量number所指代的值。知道判定行为为false。程序结束。

有时候while会这么使用

number = 1
while True:
    print number

这快代码将会无线的循环,但是在有些程序中,例如循环等待用户输入,或者循环判定一个外部的变量,知道它的状态进行改变,才终止循环。

2.2 让用户选择何时退出

可使用while循环让程序在用户愿意时不断的运行,在用户想要退出时进行退出

name_message = "What's your name?"
quit_message = " enter 'quit' to end!"
end_message = "Bye"
message = ''
while message != "quit":
    message = input(name_message)
    if message != "quit":
        print message.title() + quit_message
    else:
        print end_message

结果

What's your name?"david"
David enter 'quit' to end!
What's your name?"dana"
Dana enter 'quit' to end!
What's your name?"quit"
Bye

代码循环打印用户输入的名字,并打印用户的名字,同时告诉用户退出程序需要输入什么。

当用户输入"quit"时,进行了判断,只打印end_message所指代的字符串。

2.3 使用break退出循环

要立即退出while循环,不在运行循环中剩余的代码,也不管条件测试的结果如何,可使用break语句。break语句用于控制程序流程,可使用它来控制哪些代码将执行,哪些代码不执行,从而让程序按照你的要求执行你想要的代码。

改造上面的代码,这回使用 while True循环,让程序不断的循环,从内部进行中断循环。

name_message = "What's your name?"
quit_message = " enter 'quit' to end!"
end_message = "Bye"
message = ''
while True:
    message = input(name_message)
    if message != "quit":
        print message.title() + quit_message
    else:
        print end_message
        break

结果

What's your name?"dana"
Dana enter 'quit' to end!
What's your name?"quit"
Bye

注意:在任何Python循环中都可使用break语句。例如可使用break语句来退出遍历列表或字典的for循环。

2.4 在for循环中使用continue

要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。例如,打印从1到10中的奇数。

number = 0
while number < 10:
    number += 1
    if number % 2 == 0:
        continue
    print number

结果

1
3
5
7
9

代码中,首先先number变量的指代值设置为0。接下来循环判定number指代值是否小于10,然后把number变量指代值进行自增+1。判定当前值进行与2的求模运算,结果是不是为0,为0则继续循环并忽略下面的代码。不为0则打印当前变量number指代的值。

2.5 避免无限循环

每个while循环都必须有停止运行的途径,这样才不会没完没了的执行下去。

要避免编写无限循环,务必对每个while循环进行测试,确保它按预期那样结束。如果你希望程序在用户输入特定的值时结束,可运行程序并输入这样的值。如果在这种情况下没有结束,请检查程序在处理这个值的方式,确认程序至少有一个这样的地方能让循环条件为False或让break语句可以得到执行。

例如上面代码中提到的while True,如果没有终止,将一直执行下去,这会很浪费计算机的物理资源。应尽量避免这种情况。但是有时候业务需要这样的轮训,但是要谨记正确的使用它。

3.使用while循环处理列表和字典

for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟中其中的元素。要在遍历列表的同时对其进行修改,可使用while循环。通过将while循环同列表和字典结合起来使用,可以处理大量的信息。

3.1 在列表之间移动元素

定义一个列表,将打于18的数字移动到另一个列表中

numbers = [2, 4, 5, 64, 16, 8, 100, 21, 16]
greater_than_eighteen_numbers = []
while numbers:
    age = numbers.pop();
    if 18 <= age:
        greater_than_eighteen_numbers.append(age)
print greater_than_eighteen_numbers

结果

[21, 100, 64]

首先定义了一个numbers的列表,接下来对列表进行判断,判断列表中是否还有元素,有元素的话,就弹出最后一个元素,判定是否大于等于18,判定成功则放入greater_than_eighteen_numbers变量多指代的列表中。

3.2 删除包含特定值的所有列表中的元素

使用函数remove()来删除列表中的特定的值,之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢?

要删除所有这些元素,可不断运行一个while循环。

numbers = [16, 2, 4, 5, 64, 16, 8, 100, 21, 16, 16]
while 16 in numbers:
    numbers.remove(16)
print numbers

结果

[2, 4, 5, 64, 8, 100, 21]
3.3 使用用户输入来填充字典

可使用while循环提示用户输入任意数量的值。

res = {}
# 设置一个标记位
survey_active = True
# 询问用户的姓名和喜欢的动物
while survey_active:
    name = input("What's your name?")
    like_animal = input("What animals do you like?")
    res[name] = like_animal
    is_continue = input("Is there anyone else?(yes/no)")
    if is_continue == "no":
        survey_active = False
for key, value in res.items():
    print key + "\tlike\t" + value + "\n"

结果

What's your name?"dana"
What animals do you like?"dog"
Is there anyone else?(yes/no)"yes"
What's your name?"david"
What animals do you like?"cat"
Is there anyone else?(yes/no)"no"
dana	like	dog

david	like	cat

代码第一行定义了一个空的字典,第二行定义了循环的标记位,循环询问用户的名字和喜欢的动物并添加到字典中。然后询问用户是否还有其他人了。有的话继续循环询问。没有的话结束循环。之后打印字典中的键值对。

while循环的用处远不止于此。这只是演示了基础的用法,在今后的开发中多多练习。希望伙伴们都能有所进步。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值