习题1: 输出2000-2200之间的所有闰年
*使用while循环
year = 2000
while year <= 2200:
if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0) :
print('%d' %year ,end ='\t')
year += 1
*使用for in循环
for year in range(2000,2201):
if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
print( year , end = '\t')
习题2:输入三个数,判断是否能构成三角形,如果能,求其面积和周长
a = float(input('请输入三角形的边长a:'))
b = float(input('请输入三角形的边长b:'))
c = float(input('请输入三角形的边长c:'))
if (a + b)> c and (a + c) > b and (b + c)> a:
perimeter = a + b + c
p = perimeter/2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))
print('三角形的周长为:%.2f' %perimeter)
print('三角形的面积为:%.2f' %area)
else:
print('a,b,c三个数不能构成三角形')
习题3:输出100-999之间的水仙花数
*使用while循环
import math
num = 100while num <= 999:
unit = num % 10
ten = num % 100 // 10
hundred = num // 100
if num == math.pow(unit,3) + math.pow(ten,3) + math.pow(hundred,3):
print('%d '%num)
num = num +1
*使用for in循环
import mathfor num in range(100 , 1000):
unit = num % 10
ten = num % 100 // 10
hundred = num // 100
if num == math.pow(unit,3) + math.pow(ten,3) + math.pow(hundred,3):
print('%d '%num)
习题4:计算1 - 1/2 + 1/3 - 1/4 + 1/5 -1/6 + ...... + 1/99 - 1/100
*使用while循环
num = 1
sum_num = 0
sign = 1
while num <= 100:
factor = sign / number
sum_num = sum_num + factor
num += 1
sign = - sign
print('%.5f ' %sum_num)
*使用for in循环
sum_num = 0sign = 1
for number in range(1,101):
factor = sign / number
sign = - sign
sum_num += factor
print('%.5f' %sum_num)
习题5:人机猜拳,人和机器分别1000元钱,通过下注赢钱,当谁的钱输光,游戏停止
from random import randintmachine_money = 1000
person_money = 1000
counter = 0
while True:
machine = randint(1,3)
person = randint(1,3)
ante = int(input('请输入赌注:'))
print(person)
print(machine)
counter += 1
if machine > person:
person_money = person_money - ante
machine_money = machine_money + ante
elif machine < person:
person_money = person_money + ante
machine_money = machine_money - ante
else:
person_money = person_money
machine_money = machine_money
print('平局,再来一次!')
print('我的余额为:%d,电脑的余额为:%d' %(person_money,machine_money))
if person_money == 0 or machine_money == 0:
print('我的余额是%d ,电脑的余额是%d ' %(person_money,machine_money))
print('胜负已定!')
break
print('人机大战最终经过%d个回合分出胜负' %counter)
习题6:丢6000次骰子,统计它们出现的次数
from random import randintf1 = f2 = f3 = f4 = f5 = f6 = 0
for x in range (6000):
num = randint(1,6)
if num == 1:
f1 += 1
elif num == 2:
f2 += 1
elif num == 3:
f3 += 1
elif num == 4:
f4 += 1
elif num == 5:
f5 += 1
else:
f6 += 1
print('1总共出现%d 次' %f1)
print('2总共出现%d 次' %f2)
print('3总共出现%d 次' %f3)
print('4总共出现%d 次' %f4)
print('5总共出现%d 次' %f5)
print('6总共出现%d 次' %f6)
习题7:输入一个数,判断该数是不是素数
import mathnumber = int(input('请输入一个不小于2的整数:'))
num = 2
kqrt = math.sqrt(number)
while num < kqrt:
if number % num == 0:
break
else:
num +=1
if num <= kqrt:
print('%d is not a prime' %number)
else:
print('%d is a prime' %number)
习题8:输出200-300之间的素数
import mathfor num in range(200 , 301):
root = math.sqrt(num)
deno = 2
while deno <= root:
if num % deno == 0:
break
deno += 1
if deno > root:
print(num,end = ' ')
习题9:输入2个正整数,求出这两个数的的最大公约数以及最小公倍数
num1 = int(input('num1 = '))num2 = int(input('num2 = '))
min_num = min(num1 , num2)
for factor in range( min_num , 0 , -1 ):
if (num1 % factor == 0) and ( num2 % factor == 0):
print('最大公约数是%d' %factor)
print('最小公倍数是%d' %((num1 * num2) / factor))
break
习题10:现在有100元钱买鸡,公鸡5元/只,母鸡3元/只,小鸡1元3只,100元买100只鸡, 问公鸡/母鸡/小鸡各多少?
for x in range(21):
for y in range(34):
z =100 - x - y
if(z % 3 ==0) and (5*x + 3*y + z/3 ==100):
print(x,y,z)
习题11:找出10000以内的完美数
total = 0
for num in range(number,1,-1):
if number % num == 0:
factor = number / num
total += factor
if number == total:
print(number,end = '\t')
习题12:A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?
counter = 1while True:
count = counter
for _ in range(4):
num = (count - 1) * 4 / 5
count = num
if (count - 1) % 5 == 0:
print(counter)
break
else:
counter += 1
fish = 1
while True:
total = fish
for num in range(6):
if (total - 1) % 5 == 0:
total = (total - 1) // 5 * 4
else:
break
if num == 5:
print(fish)
break
fish += 1
习题13:一个简单的赌博游戏,游戏规则如下:玩家掷两个骰子,点数为1到6,如果第一次点数和为7或11,则玩家胜, 如果点数和为2、3或12,则玩家输,如果和 为其它点数,则记录第一次的点数和,然后继续掷骰,直至点数 和等于第一次掷出的点数和,则玩家胜,如果在这之前掷出了点数和为7,则玩家输。
num1 = randint(1, 6)
num2 = randint(1, 6)
total = num1 + num2
print('第一个骰子的点数是%d' % num1)
print('第二个骰子的点数是%d' % num2)
if (total == 7) or (total == 11):
print('第一次丢出的骰子之和为7或11,玩家赢 , good luck !')
elif (total == 2) or (total == 3) or (total == 12):
print('第一次丢出的骰子之和为2或3或12,庄家赢 , game over !')
else :
temporary = total
print('2个骰子之和为:%d' %temporary)
count = 2
while True:
count = count
num1 = randint(1, 6)
num2 = randint(1, 6)
total = num1 + num2
print()
if temporary == total:
print('count = %d' %count)
print('第一个骰子的点数是%d' % num1)
print('第二个骰子的点数是%d' % num2)
print('玩家赢, good luck !')
break
elif total == 7:
print('count = %d' % count)
print('第一个骰子的点数是%d' % num1)
print('第二个骰子的点数是%d' % num2)
print('庄家赢 , game over !')
break
else:
print('第一个骰子的点数是%d' % num1)
print('第二个骰子的点数是%d' % num2)
print('平局,继续!')
count += 1
习题14:编写程序,用户输入一个三位以上的整数,输出其前2位的数字。例如用户输入1234,则程序输出12。
from math import pownumber = int(input('请输入一个三位以上的整数:'))
digit = 2
while True:
digit += 1
if pow( 10 , digit) <= number < pow( 10 , digit + 1 ):
print('用户输入的是一个%d位数' %( digit + 1 ))
break
fact = (number // pow(10,(digit)))
print('%d'%fact)