zoukankan      html  css  js  c++  java
  • Python匹马行天下之_循环

    一、while循环

    如果条件成立(true),重复执行相同操作,条件不符合,跳出循环

      while   循环条件:

         循环操作

    (1)while循环示例

    例:输入王晓明5门课程的考试成绩,计算平均成绩

    复制代码
    1 i=1                                            # 初始化循环计数器i
    2 sum=0                                          # 初始化总成绩变量
    3 while i<=5:                                    # 从i为1开始到5,重复执行一共5次接受考试成绩、求和的操作
    4         print ('请输入第%d门课程的考试成绩'%i)    # 提示用户输入成绩,其中用到了格式化输出,%d的取值随i的值显示,第1门课程,第2门课程……
    5         sum=sum+input()                        # 把用户输入的成绩赋值给sum,最后保存着5次成绩的和
    6         i=i+1                                  # 每次循环 i 都自增1,直到大于5跳出循环
    7 avg=sum/(i-1)                                  # 当第五次执行完i=i+1时,i为6,跳出循环,计算出sum/(i-1)的值就是平均值,并赋值给avg
    8 print ('王晓明5门课程的平均成绩是%d'%avg)          # 格式化输出avg的值,由于用了%d所以计算出的%avg的数值有小数也会省去,接收整数部分
    复制代码

    (2)嵌套while循环示例

    外部循环满足条件后,执行代码开始执行内部循环,等内部循环全部执行完毕,如果还满足外部循环条件,则外部循环再次执行,依次类推,直到跳出外层循环。

    例:分别输入两个学生的5门成绩,并分别计算平均成绩

    复制代码
     1 j=1                                         # 定义外部循环计数器初始值
     2 prompt='请输入学生姓名'                       # 定义字符串变量,在用户输入时调用此变量可以减少敲汉字的麻烦
     3 while j<=2:                                 # 定义外部循环为执行两次
     4     sum=0                                   # 定义成绩初始值,之所以定义在这里,是为了当第二个学生输入成绩时可以让sum初始化为0,重新接收新学生的成绩和
     5     i=1                                     # 定义内部循环计数器初始值
     6     name = raw_input(prompt)               # 接收用户输入的学生姓名,赋值给name变量
     7     while i<=5:                             # 定义内部函数循环5次,就是接收5门课程的成绩
     8         print ('请输入第%d门的考试成绩: '%i)   #提示用户输入成绩,其中用到了格式化输出,%d的取值随i的值显示,第1门课程,第2门课程……
     9         sum= sum + input()                  # 接收用户输入的成绩,赋值给sum
    10         i+=1                                # i变量自增1,i变为2,继续执行循环,直到i等于6时,跳出循环
    11     avg=sum/(i-1)                           # 计算第一个学生的平均成绩 sum/(6-1),赋值给avg
    12     print name,'的平均成绩是%d\n'%avg         # 输出学生成绩平均值
    13     j=j+1                                   # 内部循环执行完毕后,外部循环计数器j自增1,变为2,再进行外部循环
    14 print '学生成绩输入完成!'                     # 外部循环结束,提示输入完成!
    复制代码

     二、for循环

    (1)使用for语句可以遍历全部元素,例如逐个输出字符串中的字符,逐个输出列表中的元素,元组中的元素,集合中的元素(注意赋值时各元素的顺序),字典中的键……

    复制代码
    for letter in 'Python':
      print letter
    
    结果:
    P
    y
    t
    h
    o
    n
    复制代码
    复制代码
    fruits=['西瓜','水蜜桃','葡萄']
    for fruit in fruits:
        print fruit
    
    结果:
    西瓜
    水蜜桃
    葡萄
    复制代码

    (2)重复执行相同操作

    使用range()函数创建一个数字列表

    取值范围:从起始数字开始到结束数字之前

    复制代码
    1 for i in range(0,5):  #依次把0到4保存在变量i中
    2     print 'Mr.Mangood最酷!'
    3 
    4 结果:
    5 Mr.Mangood最酷!
    6 Mr.Mangood最酷!
    7 Mr.Mangood最酷!
    8 Mr.Mangood最酷!
    9 Mr.Mangood最酷!
    复制代码

    输入王晓明的三门考试成绩,并算出平均值

    复制代码
     1 subjects=('linux系统','Mysql数据库','Python语言')  # 定义一个元组,三个元素代表三门课程
     2 sum=0                                            # 定义变量num为初始化成绩分数
     3 for i in subjects:                               # 把元组里的每一个元素依次赋值给i,一共有三次
     4     print '请输入%s的考试成绩'%i                   # 提示输入成绩,运用了格式化字符串功能,用i每次取得的元素名表达出成绩名字,%s的意思是字符串
     5     score = input()                              # 接收用户输入的成绩赋值给score
     6     sum += score                                 # 把成绩赋给sum,相当于sum = sum + score
     7 avg= sum / len(subjects)                         # 跳出for循环后,计算平均值,这里用函数len()来计算变量subjects的长度,因为subjects定义为一个元组,因此长度即为元素个数3
     8 print '王晓明的平均成绩为%d'%avg                    # 输出平均成绩
     9 
    10 结果:
    11 请输入linux系统的考试成绩
    12 87
    13 请输入Mysql数据库的考试成绩
    14 78
    15 请输入Python语言的考试成绩
    16 90
    17 王晓明的平均成绩为85
    复制代码

    (3)嵌套for循环

    输入黄晓鸣、杨影2位同学,每人三门课程的考试成绩,计算平均成绩

    复制代码
     1 student = (23'黄晓鸣','杨影')                      #定义学生姓名的元组
     2 subjects=('linux系统','Mysql数据库','Python语言')  #定义课程名字的元组
     3 for j in student:                                #把j依次取两名学生的值进行两次循环
     4     sum=0                                        #初始化成绩的值
     5     print '%s同学的考试成绩'%j                     #打印出标题
     6     for i in subjects:                           #定义课程循环
     7         print '请输入%s的考试成绩'%i               #提示输入其中一名学生的考试成绩
     8         score = input()                          #接收考试成绩赋值给score
     9         if score<0 or score>100:                 #判断分数取值范围,做提醒
    10             print '注意成绩大小'    
    11         sum+=score                               #每次输入成绩后,sum值都累加
    12     avg= sum/len(subjects)                       #求出平均成绩
    13     print j,'的平均成绩是%d\n'%avg                 #打印平均成绩
    14 print'完成学生成绩录入工作'                         #提示完成工作
    复制代码

    三、循环控制

    循环控制语句可以改变循环正常的执行顺序

    循环控制语句

    break语句:跳出本次循环(嵌套循环中只跳出一层循环)

    continue语句:跳过当前一轮循环体的剩余语句,重新测试循环状态,进入下一轮循环,比如循环的次数一共有5次,第四次遇到continue了,那么不继续执行了,直接进行第5次循环判断

    四、循环控制综合案例

    1、需求分析

    显示菜单

    (N)ew User Login

    (E)ntering User Login

    (Q)uit

    Enter choice:

    注:输入字母N,接收新的登录名和密码,保存在字典中

      输入字母E,接收登录名、密码、查找、匹配用户输入是否正确

      输入字母Q,退出

    2、执行步骤

      (1)编制菜单

      (2)使用while语句实现菜单项选择-外层循环

      (3)使用while语句接收新的登录名-内层循环

      (4)使用if语句判断菜单,执行相关操作

    3、具体代码

     1 db={}           
     2 prompt='''         
     3     (N)ew user login
     4     (E)ntering user login
     5     (Q)uit
     6 Enter choice:'''
     7 while True:         
     8     choice = raw_input(prompt).strip()[0].lower()       #读取控制台输入的字符串,去除其首尾多余的空格后,将第一个字符串转换为小写字母
     9     print '\n--You picked:[%s]'%choice      
    10     if choice not in 'neq':
    11         print '--invaild option:,try again--'
    12     else:
    13         if choice == 'n':
    14             prompt1 = '--login desired:'
    15             while True:
    16                 name = raw_input(prompt1)
    17                 if db.has_key(name):            #判断字典里的键值是否已经有输入的name值,如果有的话触发continue重新执行while循环,因为触发continue前prompt1被重新定义了,所以执行了新的name = raw_input(prompt1)
    18                     prompt1 = '--name taken,try another: '
    19                     continue
    20                 else:
    21                     break
    22             pwd = raw_input('password:')    #验证字典中的键没有输入的name值后,跳出循环,把用户输入的密码赋值给pwd
    23             db[name] = pwd      #把值传给字典db中的name键实现字典数据的完善
    24         elif choice == 'e':
    25             name = raw_input("login:")
    26             pwd = raw_input('password:')
    27             password = db.get(name)     #登录时,接收用户输入的登录名和密码后,把字典db中name键的值赋给password
    28             if password == pwd:     #比较字典中的密码password和用户输入的密码pwd是否一致
    29                 print 'welcome',name
    30             else:
    31                 print 'shibai'
    32         else:
    33             print 'quit!'
    34             break
    35         
    View Code
  • 相关阅读:
    【bzoj2821】作诗(Poetize)
    ZOJ-2112-Dynamic Rankings(线段树套splay树)
    POJ- 2104 hdu 2665 (区间第k小 可持久化线段树)
    hust-1024-dance party(最大流--枚举,可行流判断)
    hdu-3046-Pleasant sheep and big big wolf(最大流最小割)
    POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)
    POJ-Common Substrings(后缀数组-长度不小于 k 的公共子串的个数)
    POJ-2774-Long Long Message(后缀数组-最长公共子串)
    POJ-3693-Maximum repetition substring(后缀数组-重复次数最多的连续重复子串)
    spoj-694-Distinct Substrings(后缀数组)
  • 原文地址:https://www.cnblogs.com/adaicary/p/11610895.html
Copyright © 2011-2022 走看看