Python 习题练习

习题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 = 100
while 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 math

for 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 = 0
sign = 1
for number in range(1,101):
    factor = sign / number
    sign = - sign
    sum_num += factor
print('%.5f' %sum_num)

习题5:人机猜拳,人和机器分别1000元钱,通过下注赢钱,当谁的钱输光,游戏停止

from random import randint


machine_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 randint 


f1 = 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 math


number = 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 math

for 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以内的完美数

for number in range(1,10001):
    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 = 1
while 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,则玩家输。

from random import randint


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 pow
number = 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)
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值