例子:循环语句

需求:给定一个不超过5位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字。

 1 while True:
 2     a = input("Please enter a number: ")
 3     a = int(a)
 4     if (a >= 100000) | (a < 0):
 5         print("请输入一个不超过5位的正整数!")
 6     else:
 7         if a >= 1000:
 8             if a >= 10000:
 9                 num = 5
10             else:
11                 num = 4
12         else:
13             if a >= 100:
14                 num = 3
15             elif a >= 10:
16                 num = 2
17             else:
18                 num = 1
19         print("这是一个" + str(num) + "位数!")
20         c = a
21         print("从个位到万位的位数为:")
22         for i in range(num):
23             n = c // 10
24             k = c - n*10
25             print(k,end=‘ ‘)
26             c = n
27     print(‘\n‘)

我们来分析一下这个程序,首先是分功能实现需求。第一行是一个while循环,保证程序不间断的输入数字,防止输入一次就退出程序(PS:当然这个程序不完整,如果输入的不是数字的话,还是会退出程序并且报错。)。

然后2~19行是实现判别输入的数字是几位数的功能,因为需求是不超过五位数的正整数,那么我们在判别的时候可以采取“折中”的判别方式,如第7行,我们以1000这个四位数为分割点。这样的好处是提高程序的运行效率。

第4、5行是限制输入正整数的范围,如果用户输入的数字不满足需求的话,那么给出提示信息。

从第20行开始,便是开始实现个位数、十位数、百位数……的数字。c = a,这里为什么不直接调用a这个变量呢?还要将a再赋值给变量c呢?为了程序的可拓展性,防止在后续的程序代码中再次使用a,这样的话能更好的明白a变量到底是哪个数值。

我们看一下这个程序的逻辑结构,假如用户输入的是34981这个五位数,那么c=a=34981,从代码2~19得知,此时的num=5,那么i从range(5)中取值,即循环5次。

第一次循环,n=c//10=34981//10=3498(这里要注意//的意思,表示整数除法,返回不大于结果的一个最大的整数),然后k=c-n*10=34981-3498*10=1,可以看出k就是个位数的数字1,然后c=n=3498。for循环进入第二次循环,n=c//10=3498//10=349,k=3498-349*10=8,而8就是十位数的数字,如此循环,直至循环结束。

当然实现第二个功能的代码不止20~27行这一种,下面再看看几种其他的代码:

1 a *= 10
2 while(a//10) != 0:
3     a //= 10
4     print(a%10)
5 #第一行a=a*10,这行代码考虑到了边界问题。
6 #while判断语句是a//10不等于0,这里说明a至少必须是个两位数,那么如果输入的是个个位数呢?如果是个位数的话,个位数整除10就是0,不会进入while循环。就算是多位数,比如两位数整除10的话,肯定只会得到十位数,三位数的话只会得到百位和十位,没有a *= 10,这段代码就是有缺陷的。
7 #比如还是输入的是34981,那么第一轮循环a=34981*10=349810,然后进入while循环,349810//10=34981,34981%10=1(这里注意%是取模运算取余数),得出个位数字1之后,a就变成了34981,然后34981//10=3498,3498对10取模为8,得出十位数字8……
1 for i in range(num):
2     print(a % 10)
3     a //= 10
4 #循环的范围还是基于正整数的位数,这里num可以用len()获取,num=len(a)。
5 #对10取模运算,每次运算都取余数,几位数就循环几次。
6 #例如输入的还是34981,第一次循环34981对10取模运算,得出1,然后34981//10=3498,进入第二次循环,3498%10=8,然后3498//10=349……7 #这个程序和上面的程序都用到了取余和取整的结合使用。

考虑一下,如果按照万位、千位、百位、十位、各位的顺序,该如何实现呢?

 1 # noinspection PyInterpreter
 2 while True:
 3     a = input("Please enter a number: ")
 4     a = int(a)
 5     if (a >= 100000) | (a < 0):
 6         print("请输入一个不超过5位的正整数!")
 7     else:
 8         if a >= 1000:
 9             if a >= 10000:
10                 num = 5
11             else:
12                 num = 4
13         else:
14             if a >= 100:
15                 num = 3
16             elif a >= 10:
17                 num = 2
18             else:
19                 num = 1
20         print("这是一个" + str(num) + "位数!")
21         print("从万位到个位的顺序为:")
22         for i in range(num):
23             b = 10**(num-1)
24             print(a//b,end=‘ ‘)
25             num -= 1
26             a %= b
27     print(‘\n‘)

这里主要看的是如何实现从万位到个位每位数字的顺序排列,即从22~26行,因为要从万位数开始排序,那么例如输入的数字是34981,那么需要34981//10000=3得出万位数字,然后怎么取千位的数字呢?34981除以10000之后剩下的余数是4981,那么我们可以采取取模运算,34981%10000=4981,至此,第一轮循环结束,第二轮4981需要整除1000,得到千位数字4……那么来看一下,每一次循环,被除数是从10000,1000,100……这个规律,也就是10的4次方,10的3次方,10的2次方……,而10的(num-1)次方恰恰满足这个规律,因此程序中设定b=10**(num-1),要注意的是,每循环一次,10的次方都需要减1,即25行num -= 1。

原文地址:https://www.cnblogs.com/linfengs/p/11563428.html

时间: 2024-10-10 16:53:45

例子:循环语句的相关文章

js中的循环语句

js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) {    //statements;} var a=1,b=0; while(a<=1000){ if(a%2==0){ if(b%20==0) { document.write("<br>第"+parseInt(b/20+1)+"行偶数"); } document.write(a+"&nbsp"

Swift流程控制之循环语句和判断语句详解

Swift提供了所有c类语言的控制流结构.包括for和while循环来执行一个任务多次:if和switch语句来执行确定的条件下不同的分支的代码:break和continue关键字能将运行流程转到你代码的另一个点上. 除了C语言传统的for-condition-increment循环,Swift加入了for-in循环,能更加容易的遍历arrays, dictionaries, ranges, strings等其他序列类型. Swift的switch语句也比C语言的要强大很多. Swift中swi

shell基础(八)-循环语句

国庆过后:感觉有点慵懒些了:接着上篇:我们继续来学习循环语句. 一. for循环 与其他编程语言类似,Shell支持for循环. for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔.每循环一次,就将列表中的下一个值赋给变量 例如,顺序输出当前列表中的数字 for01.sh $ cat for01.sh #!/bin/sh for i in 1 2 3 4 5

python基础:循环语句和判断语句

小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------谢谢您的参考,如有疑问,欢迎交流 一. python语句块和缩进 缩进是Python语法的一部分:在python语句中,空格是用来区分块的,每一块的语句,缩进量(空格)应该是相同的 Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字: 增加缩进表示语句块的开始,而减少缩进则表示语句块的退出. 在Python中,冒号(:)用来标识语

循环语句(for、while)(一)

2016-12-18 while循环结构; while语句是Python语言中最通用的迭代结构. while语句最完整的书写格式是:首行以及测试表达式,有一列或多列缩进语句的主体以及一个可选的else部分(控制 权离开循环而又没有碰到Break语句时会执行).Python会一直计算开头的测试,然后执行循环主体内的语句,直到测试返回值为假. 1 while <test>: #Loop test 2 <statements1> #Loop body 3 else: #Optional

javascript循环语句及函数

循环语句 1.While 语法: while (exp) { //statements; } 说明: while (变量<=结束值) { 需执行的代码 } 例1: var i = 1; while(i < 3){ alert(i); i++; } 注意:如果忘记增加条件中所用变量的值,该循环永远不会结束.这可能导致浏览器崩溃. ( 用while输出1-1000的数值 var i=1; while(i<=1000){ if(i%2){ document.write(i); } //输出1-

自动化运维工具Ansible之Playbooks循环语句

在使用ansible做自动化运维的时候,免不了的要重复执行某些操作,如:添加几个用户,创建几个MySQL用户并为之赋予权限,操作某个目录下所有文件等等.好在playbooks支持循环语句,可以使得某些需求很容易而且很规范的实现. with_items是playbooks中最基本也是最常用的循环语句. - name: add several users   user: name={{ item }} state=present groups=wheel   with_items:      - t

条件判断式if和循环语句while及其函数的应用

条件判断式 if..then.case..esac if..then 是最常见的条件判断式,就是当负某个条件判断的时候,就进行某项工作 ,其中"&&"代表AND,"||"代表or if....then..else...fi 格式: if [条件判断语句]: then 当条件判断成立时,可以进行的命令工作内容: fi       // 结束if条件判断 例子:设定  A=3,判断,如果A要是等于3,就会显示3 if [ $A = 3 ]; then  

Python基础篇【第四篇】:循环语句

循环语句包含:while和for语句 while循环 whil循环的表达式: while 判断条件: (这里统一四个空格)语句 一定要注意缩进和判断条件后面的冒号! 例如用while计算1-100的和: 1 #!/usr/bin/env python3 2 3 a = 100 4 b = 0 5 counter = 1 6 7 while counter <= a: 8 b = b + counter 9 counter += 1 10 print(b) 运算结果: 1 /Library/Fra

shell脚本编程之循环语句

在运行脚本时重复执行一系列的命令是很常见的,这时我们就需要使用循环语句来达到这个目的. 一.for命令 格式:for 变量 in 列表:do 循环体 done for命令会遍历列表中的每一个值,并且在遍历完成后退出循环. 列表形式有以下几种: 1.在命令中定义的一系列的值: 2.变量: 3.命令: 4.目录: 5.文件. 实例1: 上例中使用{初始值..结束值}格式来表示一个区间的数值. 实例2:以变量作为列表: 实例3:用命令生成列表: 上例中使用seq命令来生成列表,seq命令的格式为:se