Python编程:从入门到实践(学习笔记-Charpter 7)

Python编程:从入门到实践(学习笔记-Charpter 7)

十月 17, 2019

Chapter 7 : 用户输入和while循环

7.1 函数input( )工作原理

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

  • 1
    2
    3
    #input()
    messgae = input("Tell me something, and I will repeat it back to you: ")
    print(message)

注意:编写清晰的程序,使用函数input() 时,都应指定清晰而易于明白的提示,准确地指出你希望用户提供什么样的信息,通过在提示末尾(这里是冒号 后面)包含一个空格,将提示与用户输入分开,让用户清楚的知道其输入始于何处:

  • 1
    2
    name = input("please enter your name: ") # 冒号后面有空格
    print("Hello, " + name + '!')
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #提示可能超出一行,可将提示存储在一个变量中,在将该变量传递给函数input().
    prompt = "If you tell us who you are, we can personalize the messages you see."
    prompt += "\nWhat is your first name?" # 使用+=拼接句子

    name = input(prompt)
    print("\nHello, " + name + "!")

    #-------------运行结果-------
    >>>If you tell us who you are, we can personalize the messages you see.
    What is your first name? xiaoxingd
    >>>Hello, xiaoxingd!
  • 使用int( )来获取数值输入

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      >>> age = input('How old are you?')
      How old are you? 21
      >>> age
      '21'

      #返回的是'21'字符串,不能直接作为数值使用
      #用int()处理后,可以直接用作数值
      >>> age = int(age)
      >>> age >= 18
      True
    • 1
      2
      3
      4
      5
      6
      7
      height = input("How tall are you, in inches? ")
      height = int(height)

      if height >= 36:
      print("\nYou're tall enough to ride!")
      else:
      print("\nYou'll be able to ride when you're a little older.")
  • 求模运算符%

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      #将两个数相除并返回余数:不会指出倍数,只指出余数多少
      >>> 4 % 3
      1
      >>> 5 % 3
      2
      >>> 6 % 3
      0
      >>> 7 % 3
      1
    • 1
      2
      3
      4
      5
      6
      7
      8
      #偶数能被2整除,因此对一个数(number)和2执行求模运算的结果为零,则这个数就是偶数,否则为奇。
      number = input("Enter a number, and I'll tell you if it's seven or odd: ")
      number = int(number)

      if number % 2 == 0:
      print("\nThe number " + str(number) + "is even.")
      else:
      print("\nThe number " + str(number) + "is odd.")

7.2 while循环简介

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

  • 1
    2
    3
    4
    5
    #用whie循环来数数
    current_number = 1
    while current_number <= 5: #大于5循环将停止
    print(current_number)
    current_number += 1
  • 让用户选择何时退出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    prompt = "\nTell me something, and I will repeat it back to you: "
    prompt += "\nEnter 'quit' to end the program."

    messgae = "" #此处空字符串很有必要!!
    while message != 'quit':
    message = input(prompt)

    if message != 'quit':
    print(message)


    #我们将变量 message 的初始值设置为空字符串 "" ,让 Python 首次执行 while 代码行时有可供检查的东西。
    #Python 首次执行 while 语句时,需要将 message 的值与 'quit' 进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python 将无法继续运行程序。为解决这个问题,我们必须给变量 message 指定一个初始值。虽然这个初始值只是一个空字符串,但符合要求,让 Python 能够执行 while 循环所需的比较。只要 message 的值不是 'quit' ,这个循环就会不断运行。
  • 使用标志

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

    active = True #让程序最初处于活动状态
    while active:
    message = input(prompt)

    if message == 'quit':
    active = False
    else:
    print(message)
  • 使用break退出循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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':
    break
    else:
    print("I'd love to go to " + city.title() + "!")

    #以while True打头的循环将不断运行,直到遇到break语句
  • 在循环中使用continue( )

    要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句

    1
    2
    3
    4
    5
    6
    7
    current_number = 0
    while current_number < 10:
    current_number += 1
    if current_number % 2 == 0:
    contiune  #让程序忽略下面的print()部分,直接再次循环

    print(current_number)

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

要在遍历列表的同时对其进行修改,可以使用while循环

  • 在列表之间移动元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #首先,创建一个待验证用户列表
    # 和一个用于存储已验证用户的空列表
    unconfirmed_users = ['alice', 'brian', 'candace']
    confirmed_users = []

    #验证每个用户,直到没有未验证用户为止
    # 将每个经过验证的列表都移到已验证用户列表中
    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.title())
  • 删除包含特定值的所有列表元素

    1
    2
    3
    4
    5
    6
    7
    8
    #删除特定值cat
    pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
    print(pets)

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

    print("\n" + pets)
  • 使用用户 输入来填充字典

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    responses = { }

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

    while polling_active :
    #提示输入被调查者的名字和回答

    name = input("\nWhat 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("\n--- Poll Results ---")
    for name, response in responses.items():
    print(name + "would like to climb " + response + ".")

##