这里的问题是猜出电脑里存储的数字是什么。你将要编写一个能够随机生成一个0到100之间且包括0和100的数字的程序。这个程序提示用户连续地输入数字直到它与那个随机生成的数字相同。对于每个用户输人的数字,程序会提示它是否过高还是过低,所以,用户可以更明智地选择下一个输入的数字。下面是一个简单的运行:
import random
com = random.randint(0,100)
print("Guess a magic number between 0 and 100")
a = int(input("Enter your guess:"))
while a > com:
print("Your guess is too high")
a = int(input("Enter your guess:"))
while a < com:
print("Your guess is too low")
a = int(input("Enter your guess:"))
if a == com:
print("Yes,the number is %s"%com)
两个整数4和2的最大公约数(GCD)是2。整数16和24的最大公约数是8。怎样找出最大公约数呢?假设输入的两个整数是nl和n2。你知道数字1是它们的公约数,但它并不是最大公约数。所以,你要检测k(k=2、3、4、…)是否为nl和n2的公约数,直到k大于n1或n2。把公约数存储在一个名为ged 的变量中。初始状态时,gcd的值为1。每找到一个新的公约数就把它赋给gcd。当你检测完从2到n1或从2到n2的所有可能公约数后.存储在gcd中的值就是最大公约数
n1 = int(input("输入一个整数:"))
n2 = int(input("输入一个整数:"))
if n1 > n2:
gcd = "1"
k = 1
while k <= n2:
if n1 % k == 0 and n2 % k == 0:
gcd = k
k += 1
print(gcd)
elif n1 == n2:
print(n1)
else:
gcd = "1"
k = 1
while k <= n1:
if n1 % k == 0 and n2 % k == 0:
gcd = k
k += 1
print(gcd)
蒙特卡罗模拟使用随机数和概率来解决问题。它在计算机数学、物理、化学和经济方面都有非常广泛的应用。现在,我们看一个使用蒙特卡罗模拟来估计兀的例子。首先,绘制一个带外接正方形的圆。假设这个圆的半径为1。因此,这个圆的面积就是n,而矩形的面积为4。在这个正方形内随机产生一个点。这个点落在圆内的概率为circleArea/squareArea=n/4。编写一个程序,在正方形内随机产生1 000 000个点,使用numberOfHits表示落入圆内点的个数。所以,numberOfHits大约就是1000 00CsDN oi4就可以被近似表示为4*numberOfHits/1 000 000。
import random #random.random是前闭后开区间
num = 0
total = 1000000
for i in range(1,total):
x = random.random() * 2 - 1
y = random.random() * 2 - 1
distance = (x ** 2 + y ** 2) ** 0.5
if distance <= 1:
num += 1
pi = num / total * 4
print(pi)
(统计正数和负数的个数然后计算这些数的平均值)编写一个程序来读入不指定个数的整数,然后决定已经读取的整数中有多少个正数和多少个负数并计算这些输入值(不统计0)的总和,最终得出它们的平均值。这个程序以输入值0来结束。使用浮点数显示这个平均值。下面是一个简单的示例运行。
a = int(input("Enter an integer , the input ends if it is 0:"))
b = 0
c = 0
total = 0
if a != 0:
while a > 0 or a < 0:
total += a
if a > 0:
b += 1
elif a < 0:
c += 1
a = int(input("Enter an integer , the input ends if it is 0:"))
print("The number of positives is %s"%b)
print("The number of negatives is %s"%c)
print("The total is %s"%total)
average = total / (b + c)
print("The average is %s"%average)
else:
print("You didn't enter any number")
(找出一个整数的所有因子)编写程序读取一个整数,然后显示它所有的最小因子,也称之为素因子。例如:如果输入整数为120,那么输出应该如下所示。
a = int(input("输入一个整数:"))
i = 2
b = 1
if a == 1:
print(1)
else:
while i < a:
if a % i == 0:
print(i ,end= ",")
a //= i
b *= 1
else:
i += 1
c = a / b
print(int(c))
(计算n)你可以使用下面的数列近似计算兀。
编写程序显示当i=10 000、20 000.…、100 000时n的值。
for j in range(10000,100001,10000):
sum = 0
for i in range(1,j+1):
sum += ((-1) ** i + 1 ) / (2*i-1)
PI = 4 * sum
print("当i为%d时,PI为%.9f" %(i,PI))
(计算e)你可以使用下面的数列近似计算e。
编写程序显示当i=10 000、20 000、…、100 000时e的值(提示:因为i!=ix ( i-1 ) x…×2×1,而1/t!是1/i(i-1)。初始化e和 item为1,然后不停将一个新的 item加到e中。新 item是前一个item除以i,其中 i=2、3、4、…)。
for j in range(10000,100001,10000):
e = 1
item = 1
for i in range(1,j + 1):
item *= i #item的阶乘 item = item * i
e += 1 / item
print("i = %d 时, e = %.19f"%(j,e))
(完全数)如果一个正整数等于除了它本身之外所有正因子的和,那么这个数被称为完全数。例如,6是第一个完全数,因为6=3+2+1。下一个完全数是28=14+7+4+2+1。小于10 000的完全数有四个。编写程序找出这四个数。
for i in range(1,10001):
sum = 0
for j in range(1,i):
if i % j == 0:
sum += j
if i == sum:
print(i)
(游戏:石头、剪刀、布)
给出玩石头、剪刀、布游戏的程序。改写程序让用户不断玩直到用户或计算机中的某一方能够赢得游戏超过两次。
import random
user_count = 0
com_count = 0
while True:
user= int(random.uniform(0,2))
com = int(input("scissor (0),rock (1),paper(2):"))
win = user - com
if win == -2 or win == 1:
user_count += 1
if user_count == 2:
print("恭喜,你赢了!!!")
break;
elif win == 2 or win == -1:
com_count += 1
if com_count == 2:
print("很遗憾,电脑赢了!!!")
break;
(最大数的出现)编写程序读取整数,找出它们中的最大值,然后计算它的出现次数。假设输入以数字0结束。假设你输入的是“3 5 2 5 5 5 0”;程序找出的最大数是5,而5的出现次数是4。(提示:维护两个变量max和 count。变量 max存储的是当前最大数,而 count存储的是它的出现次数。初始状态下,将第一个值赋值给max,将1赋值给count。将max和每个随后的数字进行比较。如果这个数字大于max,就将它赋值给max且将count重置为1。如果这个数等于max,给count自增1。)
a = int(input("Enter a number(0: for end of input) :"))
max = 0
count = 0
while a != 0:
if a > max:
max = a
count = 1
elif a == max:
count += 1
a = int(input("Enter a number(0: for end of input) :"))
print("The largest number is %s"%max)
print("The occurrence of the largest number is %s"%count)
(十进制到二进制)编写程序提示用户输入一个十进制整数,然后显示它对应的二进制数。
a = int(input("请输入一个十进制数:"))
print(bin(a))
(十进制到十六进制)编写程序提示用户输人一个十进制数,然后显示它对应的十六进制数。
a = int(input("请输入一个十进制数:"))
print(hex(a))
(蒙特卡罗模拟)一个正方形被分为四个更小的区域,如图a所示。如果你投掷一个飞镖到这个正方形一百万次,这个飞镖落在一个奇数区域里的概率是多少?编写程序模拟这个过程然后显式结果。(提示:将这个正方形的中心放在坐标系统的中心位置,如图b所示。在正方形中随机产生一个点,然后统计这个点落入奇数区域的次数。)
import random
total = 1000000
count = 0
for i in range(0,total):
x = random.random() * 2 - 1
y = random.random() * 2 - 1
if -1 <= x <= 0 and -1 <= y <= 1:
count += 1
elif 0 <= x <= 1 and 0 <= y <= 1 and y / (1 - x) <= 1:
count += 1
print("1000000个随机点落在奇数区域的概率是%.12f"%(count / total))
(显示闰年)编写程序显示21世纪(从2001年到2100年)里所有的闰年,每行显示10个闰年。这些年被一个空格隔开。
count = 0
for year in range(2001,2101):
if year % 4==0 and year % 100!=0:
print(year,end = " ")
count += 1
if count % 10 == 0:
print()