循环是一种控制一个语句块重复执行的结构
多道减法题测验:
利用循环来连续生成问题。在一个学生回答完所有问题后,报告正确的答案的个数,这个程序能够显示这个测验所用的时间。
import random
import time
correctCount=0
count=0
NUMBER_OF_QUESTIONS=5
startTime=time.time()#获取开始时间
while count<NUMBER_OF_QUESTIONS:
number1=random.randint(0,9)
number2=random.randint(0,9)
if number1<number2:
number1,number2=number2,number1
answer=eval(input("what is"+str(number1)+"-"+str(number2)+"?"))
if number1-number2==answer:
print("You are correct!")
correctCount+=1
else:
print("Your answer is wrong.\n",number1,"-",\
number2,"is",number1-number2)
count+=1
endTime=time.time()
testTime=int(endTime-startTime)
print("Corrtect count is",correctCount,"out of",\
NUMBER_OF_QUESTIONS,"\nTest time is",testTime,"second")
利用控制变量count的数值来控制循环的执行,count的初始值为0,每次迭代递增1,每次迭代显示一个问题并对它进行处理。
import time模块,记录时间变化
startTime=time.time()#获取开始时间
testTime=time.time()#获取结束时间
找出最大公约数、
输入两个正整数,求出最大公约数。
n1=eval(input("输入第一个数:"))
n2=eval(input("输入第二个数:"))
gcd=1
i=2
while i<=n1 and i<=n2:
if n1%i==0 and n2%i==0:
gcd=i
i+=1
print(n1,"and",n2,"最大公约数","is",gcd)
欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。
定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common
Divisor)缩写为GCD。 gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)
n1=eval(input("输入第一个数:"))
n2=eval(input("输入第二个数:"))
def gcd(a,b):
while b!=0:
a,b=b,a%b
return a
print(n1,"and",n2,"最大公约数",gcd(n1,n2))
蒙特卡罗模拟估计pi
蒙特卡罗模拟使用随机数和概率解决问题。
假设一个圆的半径是1,因此这个圆的面积就是pi,而矩形的面积为4,在这个矩形里随机产生一个点,这个点落在圆内的概率为圆形面积/矩形面积=pi/4。
蒙特卡罗算法表示采样越多,越近似最优解。
假设随机产生有1000000个点,有n个点表示落到了圆内,则n=1000000*(pi/4)。pi=4*n/1000000。
import random
bornnumber=1000000
n=0
for i in range(bornnumber):#在正方形内反复产生随机点(x,y)
x=random.random()*2-1
y=random.random()*2-1
if x*x+y*y<=1:
n+=1
pi=4*n/bornnumber
print("PI is",pi)
素数
一个大于1的整数如果只能被正整数1和它本身整除则它就是素数。
根据自然数中的素数排列,输出前60个素数 并排列整齐。
解析:为了确定一个数是否为素数,检测它能否被2到number/2的数(包括2和number/2)整除,如果能,那它就不是一个素数,如果是素数,就显示它,如果count可以被10整除,就进入下一行
当count达到60时,程序终止。
numberofprimes=60
numberline=10
count=0
number=2
print("The first 60 prime numbers are")
while count<numberofprimes:
isprime=True
divisor=2
while divisor<=number/2:
if number%divisor==0:#整除的话就不是素数
isprime=False
break #跳出循环
divisor+=1
if isprime:
count+=1
print(format(number,"6d"),end='')
if count%numberline==0:
print()
number+=1