zoukankan      html  css  js  c++  java
  • 第七章 用户输入和while语句

        大多数编程都旨在解决最终用户的问题,为此通常需要从用户那里获取一些信息。例如,假设有人要判断自己是否到了投票的年龄,要编写回答这个问题的程序,就需要知道用户的年龄,这样才能给出答案。因此,这种程序需要让用户输入其年龄,再将其与投票年龄进行比较,以判断用户是否到了投票的年龄,再给出结果。

        在本章中,我们将学习如何接受用户输入,让程序能够对其进行处理。在程序需要一个名字时,我们需要提示用户输入该名字;程序需要一个名单时。我们需要提示用户输入一系列名字。为此,我们需要使用函数input()

        我们还将学习如何让程序不断地运行,让用户能够根据需要输入信息,并在程序中使用这些信息。为此,我们需要使用while循环让程序不断地运行,直到制定的条件不满足为止。

        通过获取用户输入并学会如何控制程序的运行时间,可编写出交互程序。

    7.1  函数input()的工作原理

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

        例如,下面的程序让用户输入一些文本,再将这些文本呈现给用户:

    message = input("Tell me something, and I'll repeat it back to you: ")
    print(message)
    函数input()接受一个参数:既要向用户显示的提示或说明,让用户知道该如何做。在这个示例中,Python运行第一行代码时,用户将看到提示Tell me
    something, and I will repeat it back to you:。程序等待用户输入,并在用户按回车键后继续运行。用户输入存储在变量message中,就下来的print(
    message)将输入呈现给用户:
    Tell me something, and I'll repeat it back to you: Hello everyone
    Hello everyone

    7.1.1 编写清晰的程序
    每当我们使用函数input()时,都应指定清晰而易于明白的指示,准确地指出我们希望用户提供什么样的信息——指出用户该输入任何信息的提示都行,
    如下所示:
    name = input("Please inter your name: ")
    print("Hello," + name.title()+ "!")
    通过在提示末尾(这里是冒号后面)包含一个空格,可将提示与用户输入分开,让用户清楚地知道其输入始于何处,如下所示:
    Please inter your name: zeng mingzhu
    Hello,Zeng Mingzhu !
    有时候,提示可能超过一行,例如,我们可能需要指出获取特定输入的原因。在这种情况下,可能提示存储在一个变量中,再将该变量传递给函数input()
    .这样,即便提示超过一行,input()语句也非常清晰。
    greeter.py

    prompt = "If you tell us who are you, we can personalize the messages you see."
    prompt += " What is your first name? "

    name = input(prompt)
    print(' Hello, ' + name.title())
    这个示例演示了一种创建多行字符串的方式。第1行将消息的前半部分存储在变量prompt中;在第2行中,运算符+=在存储在prompt中的字符串末尾附加一个
    字符串。
    最终的提示横跨两行,并在问号后面包含一个空格,这也是出于清晰考虑:
    If you tell us who are you, we can personalize the messages you see.
    What is your first name? eric

    Hello, Eric

    7.1.2 使用int()来获取数值输入
    使用函数input()时,Python将用户输入解读为字符串。请看下面让用户输入其年龄的解释器会话:
    >>> age = input("How old are you? ")
    How old are you? 25
    >>> age
    '25'
    >>> age > 10
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unorderable types: str() > int()
    用户输入的是数字21,但我们请求Python提供变量age的值时,它返回的是'21'--用户输入的数值的字符串表示。我们怎么知道Python将输入解读成了字符串
    呢?因为这个数字用引号括起来了。如果我们只想打印输入,这一点没有问题;但如果我们试图将输入作为数字使用,就会引发错误:
    >>> age = input("How old are you? ")
    How old are you? 30
    >>> print("I'm " + age + " years old.")
    I'm 30 years old.
    >>> age >= 30
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unorderable types: str() >= int()
    我们知道在我们进行字符串和数字相加的时候,经常会引发错误,提示我们字符串和数字不能相加,但是我们这里向程序输入了30,但是结果却可以相加,
    这是因为input()函数将用户输入的数字当成了字符串,当我们用这个输入进行比较的时候会发现,也提示了错误,字符串不能够和数字进行比较。这点我们要
    牢记,使用函数input()输入的都是字符串格式
    我们试图将输入用于数值比较时,Python会引发错误,因为它无法将字符串和整数进行比较:不能将存储在age中的字符串'30'与数值30进行比较。
    为解决这个问题,可使用函数int(),它让Python将输入视为数值。函数int()将数字的字符串表示转换为数值表示,如下所示:
    >>> age = input("What's your age? ")
    What's your age? 25
    >>> age = int(age)
    >>> age >= 30
    False
    >>> age <= 18
    False
    >>> age >= 18
    True
    在这个示例中,我们在提示时输入25后,Python将这个数字解读为字符串,但随后int()将这个字符串转换成了数值表示。这样Python就能运行条件测试了:
    将变量age(它现在包含数值21)同18进行比较,看它是否大于或等于18.测试结果为True。
    如何在实际程序中使用函数int()呢?(要转换为数值的时候使用,但不需要转换的时候就不需要,字符串的格式也免得我们把数值转换为字符串)请看下面
    的程序,它判断一个人是否满足坐过山车的身高要求:
    #让用户输入自己的身高,并且将输入的身高转化为数值,以方便判断是否满足条件要求
    height = input("How tall are you, in inches? ")
    height = int(height)

    if height >= 36:
    print(" You're tall enough to ride!")
    else:
    print(" You'll be able to ride when you're a little older.")
    在这个程序中,为何可以将height同36进行比较呢?因为在比较前,height = int(height)将输入转换成了数值表示。如果输入的数字大于或等于36,我
    们就告诉用户他满足身高条件:
    How tall are you, in inches? 40

    You're tall enough to ride!
    将数值输入用于计算和比较前,务必将其转换为数值表示。

    7.1.3 求模运算符
    处理数值信息时,求模运算符(%)是一个很有用的工具,它将两个数相处并返回余数:
    >>> 4 % 3
    1
    >>> 5%3
    2
    >>> 6 % 3
    0
    >>> 1 % 3
    1
    >>> 2 % 3
    2
    >>> 0 % 3
    0
    求模运算符不会指出一个数是另一个数的多少倍,而只指出余数是多少。
    如果一个数可被另一个数整除,余数就为0,因此求模运算符将返回0.我们可以利用这一点来判断一个数是奇数还是偶数:
    even_or_odd.py
    number = input("Enter a number, and I will tell you if it's even or odd: ")
    number_0 = int(number)

    if number_0 % 2 == 0:
    print(" The number " + number + ' is even.')
    else:
    print(" The number " + number + " is odd.")
        偶数都能被2整除,因此对一个数(number)和2执行求模运算的结果为零,即number % 2 == 0,那么这个数就是偶数;否则就是奇数。
    Enter a number, and I will tell you if it's even or odd: 38

    The number 38 is even.

    总结:其实我们只要牢记一点,就是input()函数获取用户输入得到的是字符串,无论我们输入什么,都是以字符形式出现的,因此要根据我们的目的,我们
    想要以字符形式使用还是数字形式使用,如果以字符形式使用,那么就不用进行转换,要是以数值形式运用,就行比较,就需要进行转换才能使用。

    动手试一试
    7-1 汽车租赁:编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如"Let me see if I can find you a Subaru."
    rent_car = input("What kind of car do you need to rent? ")

    print("Let me see if I can find you a " + rent_car.title() + ".")

    运行结果如下:
    What kind of car do you need to rent? audi
    Let me see if I can find you a Audi.

    7-2 餐馆订位: 编写一个程序,询问用户有多少人用餐。如果超过8个人,就打印一条消息,指出没有空桌;否则指出有空桌。
    persons = input("How many of you have dinner together? ")
    persons = int(persons)

    if persons > 8 :
    print(" Sorry,there's no table.")
    else:
    print(" There's table for yours, come in, please.")
    运行结果如下:
    How many of you have dinner together? 16

    Sorry,there's no table.

    7-3 10的整数倍: 让用户输入一个数字,并指出这个数字是否是10的整数倍。
    本题主要考察我们求模运算符(%)的使用
    number = int(input("Enter a number, and I'll tell you if it's 10 integer times? "))

    if number % 10 == 0:
    print(" The number is 10 integer times.")
    else:
    print(" The number is not 10 integer times.")
    运算结果如下:
    Enter a number, and I'll tell you if it's 10 integer times? 100

    The number is 10 integer times.

    7.2 while循环简介
    for循环用于针对集合中的每个元素的一个代码块,而while循环不断地运行,直到指定的条件不满足为止

    7.2.1 使用while循环
    我们可以使用while循环来数数,例如,下面的while循环从1数到5:
    counting.py
    current_number = 1
    while current_number <= 5:
    print(current_number)
    current_number += 1
    在第1行,我们将current_number设置为1,从而指定从1开始数。接下来的while循环被设置成这样:只要current_number小于或等于5,就接着运行这个
    循环。循环中的代码打印current_number的值,再使用代码current_number += 1将其值加1.
    只要满足条件current_number <= 5 ,Python就接着运行这个循环。由于1小于5,因此Python打印1,并将current_number加1,使其为2,;由于2小于5,
    因此Python打印2,并将current_number加1,使其为3,一次类推。一旦current_number大于5,循环将停止,整个程序也将到此结束:
    1
    2
    3
    4
    5
    我们每天使用的程序很可能就包含while循环。例如,游戏使用while循环,确保在玩家想玩时不断运行,并在玩家想退出时停止运行。如果程序在用户没有
    让它停止时就停止运行,或者在用户要退出时还继续运行,那就太没有意思了;有鉴于此,while循环很有用。

    7.2.2 让用户选择何时退出
    可使用while循环让程序在用户愿意时不断地运行,如下面的程序parrot.py所示。我们在其中定义了一个退出值,只要用户输入的不是这个值,程序就接着
    运行:
    parrot.py
    prompt = ' Tell me something, and I will repeat it back to you: ' ——(1)
    prompt += " Enter 'quit' to end the program. "
    message = "" ——(2)
    while message != 'quit': ——(3)
    message = input(prompt)
    print(message)
    在(1)处,我们定义了一条消息,告诉用户他有两个选择:要么输入一条消息,要么输入退出值(这里为'quit')。接下来,我们创建了一个变量——message
    用于存储用户输入的值。我们将变量message的初始值设置为空字符串"",让Python首次执行while代码时有可供检查的东西。Python首次执行while语句时,
    需要将message的值与'quit'进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法运行程序。为解决这个问题,我们必须给变量message
    指定一个初始值。虽然这个初始值只是一个空字符串,但符合要求,让Python能够执行while循环所需的比较。只是message的值不是'quit',这个循环就会不断
    运行。
    首次遇到这个循环时,message是一个空字符串,因此Python进入这个循环。执行到代码行message = input(prompt)时,Python显示提示消息,并等待用
    户输入。不管用户输入是什么,都将存储到变量message中并打印出来;接下来,Python重新检查while语句中的条件。只要用户输入的不是单词'quit',Python
    就会再次显示提示消息并等待用户输入。等到用户终于输入'quit'后,Python停止执行while循环,而整个程序也到此结束。
    Tell me something, and I will repeat it back to you:
    Enter 'quit' to end the program. Hello everyone
    Hello everyone

    Tell me something, and I will repeat it back to you:
    Enter 'quit' to end the program. Hello again
    Hello again

    Tell me something, and I will repeat it back to you:
    Enter 'quit' to end the program. quit
    quit
    这个程序很好,唯一美中不足的是,它将单词'quit'也作为一条消息打印了出来。为修复这种问题,只需要使用一个简单的if测试:
    propmt = "
    Tell me something and I will repeat it back to you: "
    propmt += ' Enter "quit" to end the program. '

    message = ''
    while message != 'quit':
    message = input(propmt)
    if message != 'quit':
    print(message)
    这个程序与上面程序的区别是,这个程序在打印的时候进行了一次判断,判断在什么样的条件下才允许打印,什么样的情况下不允许打印。
    现在,程序在显示消息前做简单的检查,仅在消息不是退出值时才打印它:
    Tell me something and I will repeat it back to you:
    Enter "quit" to end the program. Hello everyone!
    Hello everyone!

    Tell me something and I will repeat it back to you:
    Enter "quit" to end the program. Hello again.
    Hello again.

    Tell me something and I will repeat it back to you:
    Enter "quit" to end the program. quit

    7.2.3 使用标志
    在前一个示例中,我们让程序在满足指定条件时就执行特定的任务。但在更复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么
    办呢?
    例如,在游戏中,多种事情都可能导致游戏结束,如玩家一艘飞船都没有了或者要保护的城市被摧毁了。导致程序结束的事件有很多时,如果在一条while
    语句中检查所有这些条件,将即复杂又困难。
    在要求很多条件都满足才能继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。整个变量被称为标志,充当了程序的交通信号灯,
    我们可让程序在标志为True时继续运行,并在任何事件导致标志的值为False时让程序停止运行。这样,在while语句中就只需检查一个条件——标志的当前值是
    否为True,并将所有测试(是否发生了应将标志设置为False的事件)都放在其他地方,从而让程序变得更为整洁。
    下面来在前一节的程序parrot.py中添加一个标志。我们把这个标志命名为active(可给它指定任何名称),它将用于判断程序是否应继续运行:
    prompt = "
    Tell me something and I will repeat it back to you: "
    prompt += " Enter 'quit' to end the program. "

    active = True
    while active:
    message = input(prompt)

    if message == 'quit':
    active = False
    else:
    print(message)

    我们将变量active设置成了True,让程序最初处于活动状态。这样做简化了while语句,因为不需要在其中做任何比较——相关的逻辑由程序的其他部分
    处理。只要变量active为True,循环就将继续运行。
    在while循环中,我们在用户输入后使用一条if语句来检查变量message的值。如果用户输入的是'quit',我们就将变量active设置为False,这将导致
    while循环不在执行。如果用户输入的不是'quit',我们就将输入作为一条消息打印出来。
    这个程序的输出与前一个示例相同。在前一个示例中,我们将条件测试直接放在了while语句中,而在这个程序中,我们使用了一个标志来指出程序是否处于
    活动状态,这样如果要添加测试(如elif语句)以检查是否发生了其他导致active变为False的事件,将很容易。在复杂的程序中,如很多事件都会导致程序停止
    运行的游戏中,标志很有用:在其中的任何一个事件导致活动标志变成False时,主游戏循环将退出,此时可显示一条游戏结束消息,并让用户选择是否要重新玩
    标志事件可能有时候很有用,然而不断如何使用,我们一定要记得,如何开启while循环,以及如何退出这个循环,不能让while循环变成死循环,一直不停
    的运行,这样就没有太多的意义了。

    7.2.4 使用break退出循环
    立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break语句。break语句用于控制程序流程,可使用它来控制
    哪些代码行将执行,哪些代码行不执行,从而让程序按我们的要求执行要执行的代码。
    例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,我们可以在用户输入'quit'后使用break语句立即退出while循环:
    prompt = '
    Please enter the name of a city you have visited: '
    prompt += " Enter 'quit' when you are finished. "

    while True:
    cities = input(prompt)
    if cities == 'quit':
    break
    else:
    print("I'd love to go to " + cities.title() + ".")
    以while True打头的循环将不断运行,直到遇到break语句。这个程序中的循环不断输入用户到过城市的名字,知道他输入'quit'为止。用户输入'quit'后
    ,将执行break语句,导致Python退出循环:
    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. beijing
    I'd love to go to Beijing.

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. seoul
    I'd love to go to Seoul.

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. quit

    7.2.5 在循环中使用continue
    要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。例如
    来看一个从1数到10,但只打印其中奇数的循环:
    counting.py
    current_number = 0
    while current_number < 10:
    current_number += 1

    if current_number % 2 == 0:
    continue

    print(current_number)
    我们首先将current_number设置成了0,由于它小于10,Python进入while循环。进入循环后,我们以步长1的方式往上数,因此current_number为1,接下
    来,if语句检查current_number与2的求模运算结果。如果结果为0(意味着current_number可能被2整除),就执行continue语句,让Python忽略余下的代码,并
    返回到循环的开头。如果当前的数字不能被2整除,就执行循环中余下的代码,Python将这个数字打印出来。
    1
    3
    5
    7
    9


    感悟:第一遍学习的时候我也总是弄错,感觉continue循环的用处是什么,不也是退出循环的吗?现在才完全明白,原来continue是退出当前这次循环,不再
    执行当前循环continue后面的语句,直接返回循环开头重新进行判断,这就要求我们,条件一定是在continue语句前面进行改变,不然条件如果在后面的话,
    就会陷入到死循环,因为后面的语句执行不了,这点需要我们注意。下面来重新看一下我们之前的程序,当我们退出的时候会有怎样的结果:
    current_number = 1
    while current_number < 10:

    if current_number % 2 == 0:
    continue

    print(current_number)
    current_number += 1
    如果对上述代码进行修改,那么就会陷入到一个死循环,第一次打印一个1,然后current_number == 2,那么执行到if语句的时候,求模运算的结果为0,
    执行continue语句,跳到循环的开头,这个时候,current_number还是2,一直这样执行,陷入到一个死循环过程中。

    我们将cities.py的代码进行简单修改,把break改成continue,看程序会怎样:
    prompt = '
    Please enter the name of a city you have visited: '
    prompt += " Enter 'quit' when you are finished. "

    while True:
    cities = input(prompt)
    if cities == 'quit':
    continue
    else:
    print("I'd love to go to " + cities.title() + ".")
    运行结果如下:
    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. beijing
    I'd love to go to Beijing.

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. shanghai
    I'd love to go to Shanghai.

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. quit

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. seoul
    I'd love to go to Seoul.

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished. quit

    Please enter the name of a city you have visited:
    Enter 'quit' when you are finished.
    当我们输入信息时,程序运行;当我们输入退出条件的时候,程序是不执行continue后面的语句了,但是程序继续运行,从新询问我们,并没有停止运行,
    这个程序就是一个死循环,不停的运行。没有终止条件了。

    7.2.6 避免无限循环

    每个while循环都必须有停止运行的途径,这样才不会没完没了地执行下去。例如,下面的循环从1数到5:x = 1
    x = 1

    while x <= 5:
    print(x)
    x += 1
    但如果我们像下面不小心遗漏了代码x += 1,这个循环将没完没了地运行:
    #这个循环将没完没了地运行!
    x = 1
    while x <= 5:
    print(x)
    在这里,x的初始值为1,但根本不会变,因此条件测试x <= 5始终为True,导致while循环没完没了地打印1,如下所示:
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    Traceback (most recent call last):
      File "/home/zhuzhu/title7/counting2.py", line 3, in <module>
        print(x)
    KeyboardInterrupt
    1
    每个程序员都会偶尔因不小心而编写出无限循环,在循环的退出条件比较微妙时尤其如此。如果程序陷入无限循环,可按Ctrl+C,也可关闭显示程序输出的
    终端窗口。
    要避免编写无限循环,务必对每个while循环进行测试,确保它按预期那样结束。如果我们希望程序在用户输入特定值时结束,可运行程序并输入这样的值;
    如果在这种情况下程序没有结束,请检查程序处理这个值的方式,确认程序至少有一个这样的地方能让循环条件为False或让break语句得以执行。

    动手试一试
    7-4 比萨配料: 编写一个循环,提示用户输入一系列的比萨配料,并在用户输入'quit'时结束循环。每当用户输入一种配料后,都打印一条消息,说我们会在
    比萨中添加这种配料。
    本题考察的是input()函数的应用,还有一循环,因为我们要添加用户的配料,为了更逼真一点,我们可以添加一个空的列表,用于存放用户的配料
    prompt = "
    Please enter your choice of pizza ingredients: "
    prompt += ' Enter "quit" to end the program. '

    ingredients = []
    active = True
    while active:
    message = input(prompt)
    if message == 'quit':
    active = False
    else:
    print("We will add the " + message.title() + " to your pizza.")
    ingredients.append(message.title())
    print(ingredients)
    运行结果如下:
    Please enter your choice of pizza ingredients:
    Enter "quit" to end the program. pepper
    We will add the Pepper to your pizza.

    Please enter your choice of pizza ingredients:
    Enter "quit" to end the program. pepperoni
    We will add the Pepperoni to your pizza.

    Please enter your choice of pizza ingredients:
    Enter "quit" to end the program. quit
    ['Pepper', 'Pepperoni']
    上述程序,由于语句太长,我们分成两行,然后把它放到input()函数里面,当做提示语,提示用户输入什么信息,如何退出,这样看起来比较简介;我们定
    义了一个空列表,用户存放用户输入的配料,最后打印出来,看是否有添加进去,我们使用的是标志的方式让程序运行和结束,本题可以使用直接判断,或者break
    语句都可以完成问题。

    7.3 使用while循环来处理列表和字典

    到目前为止,我们每次都值处理了一项用户信息:获取用户输入,再将输入打印出来或作出应答;循环再次运行时,我们获悉了另一个输入值并作出响应。然
    而,要记录大量的用户和信息,需要在while循环中使用列表和字典。
    for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while
    循环。通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。

    7.3.1 在列表之间移动元素

    假设有一个列表,其中包含新注册但还为验证的网站用户;验证这些用户后如何将它们移到另一个已验证用户列表中呢?一种办法是使用while循环,在验证
    用户的同时将其从未验证用户列表中提取出来,再将其加入到另一个已验证用户列表中:

    #首先,创建一个待验证用户列表
    #和一个用于存储已验证用户的空列表
    unconfirmed_users = ['alice','brian','candace']
    confirmed_users = []

    #验证每个用户,直到没有为验证用户为止
    #将每个经过验证的列表都移到已验证用户列表中
    while unconfirmed_users:
    current_user = unconfirmed_users.pop()

    print("Verifying user: " + current_user)
    confirmed_users.insert(1,current_user)

    #显示所有已验证的用户
    print(" The following users have been confirmed: ")
    for confirmed_user in confirmed_users:
    print(confirmed_user.title())
    我们首先创建了一个未验证的用户列表,其中包含用户Alice、Brian和Candace,还创建了一个空列表,用户存储已验证的用户。while循环将不断地运行,
    直到列表unconfirmed_users变成空的,在这个循环中,函数pop()以每次一个的方式从列表unconfirmed_users末尾删除为验证的用户。由于Candance位于列
    表unconfirmed_users末尾,因此其名字将首先被删除、存储到变量current_user中并加入到列表confirmed_users中。接下来是Brian,然后是Alice。
    为模拟用户验证过程,我们打印一条验证消息并将用户加入到已验证用户列表中。未验证用户列表越来越短,而已验证用户列表越来越长。未验证用户列表
    为空后结束循环,再打印已验证用户列表:
    Verifying user: candace
    Verifying user: brian
    Verifying user: alice

    The following users have been confirmed:
    Candace
    Alice
    Brian

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

    在第三章中,我们使用remove()来删除列表中的特定值,这只所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元
    原,该怎么办呢?
    假设我们有一个宠物列表,其中包含多个值为'cat'的元素。要删除所有这些元素,可不断运行一个while循环,直到列表中不在包含值'cat',如下所示:
    pets = ['dog','cat','dog','goldfish','cat','rabbit','cat']

    while 'cat' in pets:
    pets.remove('cat')

    print(pets)
        我们首先创建了一个列表,其中包含多个值为'cat'的元素。打印这个列表后,Python进入while循环,因为它发现'cat'在列表中至少出现了一次。进入这
    个循环后,Python删除第一个'cat',并返回到while代码行,然后发现'cat'还包含在列表中,因此再次进入循环。它不断删除'cat',知道这个值不再包含在
    列表中,然后退出循环并再次打印列表。
    ['dog', 'dog', 'goldfish', 'rabbit']

    7.3.3 使用用户输入来填充字典

    可使用while循环提示用户输入任意数量的信息。下面来创建一个调查程序,其中的循环每次执行都提示输入被调查者的名字和回答。我们将收集的数据存
    储在一个字典中,以便将回答同被调查者关联起来:
    #创建一个空字典,用户存储用户的输入
    responses = {}

    #设置一个标志,指出调查是否继续
    polling_active = True

    while polling_active:
    #提示输入被调查这的名字和回答
    name = input(' What is your name? ')
    response = input("Which mountain 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(' --- Poll Results ---')
    print(responses)
    for name,response in responses.items():
    print(name + ' would like to climb ' + response + '.')

    这个程序首先定义了一个空字典(responses),并设置了一个标志(polling_active),用于指出调查是否继续。只要polling_active为True,Python就运行
    while循环中的代码。
    在这个循环中,提示用户输入其用户名及其喜欢爬哪座山。将这些信息存储在字典responses中,然后询问用户调查是否继续。如果用户输入yes,程序将
    再次进入while循环;如果用户输入no,标志polling_active将被设置为False,而while循环将就此结束。最后一个代码块显示调查结果。
    如果运行这个程序,并输入一些名字和问答,输出将类似于下面这样:
    What is your name? zeng
    Which mountain would you like to climb someday? taishan
    Would you like to let another person respond? (yes/no) yes

    What is your name? geng
    Which mountain would you like to climb someday? hengshan
    Would you like to let another person respond? (yes/no) no

    --- Poll Results ---
    {'geng': 'hengshan', 'zeng': 'taishan'}
    geng would like to climb hengshan.
    zeng would like to climb taishan.

    动手试一试
    7-8 熟食店:创建一个名为Sandwich_orders的列表,在其中包含各种三明治的名字;在创建一个名为finished_sandwiches.所有三明治都制作好后,打印一
    条消息,将这些三明治列出来。
    本题考察的是while循环对列表的操作,从一个列表中转移到另外一个列表中
    sandwich_orders = ["Tea Sandwiches",'Classic Club Sandwiches','Crilled Cheese Sandwiches','Ham Sandwiches']
    finished_sandwiches = []

    while sandwich_orders:
    current_sandwich = sandwich_orders.pop()
    finished_sandwiches.append(current_sandwich)

    print(finished_sandwiches)


    7-10 梦想的度假胜地:编写一个程序,调查用户梦想的度假胜地。使用类似于"if you could visit one place in the world,where would you go?"的
    提示,并编写一个打印调查结果的代码块。
    #定义一个空的字典,用户存储用户名以及用户想去的地方
    vacationlands = {}

    #定义一个标志,用于判断是否继续进行调查
    visit_active = True
    while visit_active:
    #提示用户输入名字和回答
    name = input(" What's your name? ")
    response = input("If you could visit one place in the world, where would you go? ")

    #将答卷存储在字典中
    vacationlands[name] = response

    #看看是否还有人要参与调查
    repeat = input("Would you like to let another person respond? (yes/no) ")
    if repeat == 'no':
    visit_active = False

    print(vacationlands)
    运行结果如下:
    What's your name? zengmingzhu
    If you could visit one place in the world, where would you go? seoul
    Would you like to let another person respond? (yes/no) yes

    What's your name? tom
    If you could visit one place in the world, where would you go? london
    Would you like to let another person respond? (yes/no) no
    {'tom': 'london', 'zengmingzhu': 'seoul'}
    7.4  小结

    在本章中,我们学习了:如何在程序中使用input()来让用户提供信息;如何处理文本和数字输入,以及如何使用while循环让程序按用户的要求不断地运
    行;多种控制while循环流程的方式:设置活动标志、使用break语句以及使用continue语句;如何使用while循环在列表之间移动元素,以及如何从列表中删除
    所有包含特定值的元素;如何结合使用while循环和字典。
    在第8章,我们将学习函数。函数让我们能够将程序分成很多很小的部分,其中每部分都负责完成一项具体任务。我们可以根据需要调用一个函数任意次,还
    可将函数存储在独立的文件中。使用函数可让我们编写的代码效率更高,更容易维护和排除故障,还可在众多不同的程序中重用。




     
     




     
     

     



     


     
     



     















  • 相关阅读:
    为什么 PCB 生产时推荐出 Gerber 给工厂?
    Fedora Redhat Centos 有什么区别和关系?
    【KiCad】 如何给元件给元件的管脚加上划线?
    MCU ADC 进入 PD 模式后出现错误的值?
    FastAdmin 生产环境升级注意
    EMC EMI 自行评估记录
    如何让你的 KiCad 在缩放时不眩晕?
    KiCad 5.1.0 正式版终于发布
    一次单片机 SFR 页引发的“事故”
    java基础之集合
  • 原文地址:https://www.cnblogs.com/gengcx/p/6631220.html
Copyright © 2011-2022 走看看