Python---第4天---分支和循环结构的练习

Python—第4天—分支和循环结构的应用

分支和循环结构的应用

Python中的分支和循环结构的重要性不言而喻,它是构造程序逻辑的基础。我们需要加强编程练习。

练习1:

找出100~999之间的水仙花数(各位数字的立方和刚好等于这个数本身)

153 = 1^3 + 5^3 +3^3

for i in range(100, 1000):
    a = i // 100
    b = i // 10 % 10
    c = i % 10
    if a ** 3 + b ** 3 + c ** 3 == i:
        print(i)

练习2:

找出1~10000之间的完美数(除自身外所有因子的和等于这个数)

6= 1 +2 + 3

28 = 1 +2+4+7 +14

for num in range(2, 10001):
    total = 1
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            total += i
            if i != num // i:
                total += num // i
    if num == total:
        print(num)
int(num ** 0.5) + 1
 if i != num // i:
                total += num // i
 用来减少电脑计算,增加运行速度
import time
start = time.time()
end = time.time()
print(f'执行时间:{end - start:.3f}秒')
用来计算电脑运行时长

练习3:

输入m和n (m >= n) ,计算C(m,n)的值—>m! / (n! * (m - n)!)

from math import factorial as f

m = int(input('m = '))
n = int(input('n = '))

print(f(m) / f(n) / f(m - n))

as —> alise —> 别名

练习4:

输入一个正整数,判断它是不是质数(只能被1和自身整除的数)

num = int(input('输入一个正整数:'))
b = True
for i in range(2, int(num ** 0.5) + 1):
    if num % i == 0:
        b = False
        break
if b and num > 1:
    print(f'{num}是质数')
else:
    print(f'{num}不是质数')

break关键字,它的作用是提前结束循环。需要注意的是,break只能终止它所在的那个循环。

练习5:

输入三角形三条边的长度,如果能构成三角形就计算周长和面积,如果不能构成三角形,提示用户重新输入,直到正确

while True:
    a = float(input('a = '))
    b = float(input('b = '))
    c = float(input('c = '))
    p = 0.5 * (a + b + c)
    if a + b > c and a + c > b and b + c > a:
        print(f'三角形周长为:{a + b + c}')
        print(f'三角形面积为:{(p * (p - a) * (p -b) * (p -c)) ** 0.5}')
        break
    else:
        print('请重新输入')

练习6:

输入一个正整数N,将N进行反转

n = int(input('N = '))
total = 0
while n != 0:
    a = n // 10
    b = n % 10
    total = total * 10 + b
    n = a
print(total)

练习7:

打印出1-100范围内的质数

for num in range(1, 101):
    b = True
    for i in range(2, num):
        if num % i == 0:
            b = False
            break
    if b and num > 1:
        print(num, end=' ')

练习8:

打印九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j} * {i} = {i * j}', end='\t')
    print()

练习9:

输入一个n,输出n个斐波拉切数
斐波纳契数列(Fibonacci sequence)是数学界十分著名的数列,其前几项是1,1,2,3,5,8,13,21,34,55,89,144·······,这个数列最大特点就是其中每一项都等于其前两项的和。从第三个数起,每个数与它后面那个数的比值,都很接近于0.618,正是“黄金分割”。斐波那契数列又称“兔子数列”、黄金分割数列。这个看上去很简单的数列,却总是出现在人们的眼前。

n = int(input('n = '))
a = 1
b = 1
print(a, b, sep='\n')
for _ in range(0, n-2):
    a, b = b, a + b
    print(b)

练习10:

百钱百鸡问题

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

for a in range(0, 21):
    for b in range(0, 34):
        # for c in range(0, 100, 3):
        c = 100 - a - b
        if c % 3 == 0 and 5 * a + 3 * b + c // 3 == 100:
            print(f'公鸡有{a}只,母鸡有{b}只,小鸡有{c}只')

穷举法:穷尽所有的可能性,然后设置条件,找到问题的解 —> 暴力破解法

练习11:

五个人(ABCDE)晚上去捕鱼,捕了不计其数的鱼,然后累了去睡觉。
第二天,A第一个醒过来,把鱼分成了5份,扔掉了多余的1条,然后拿走自己的1份;
B第二个醒过来,以为鱼没有分过,把剩下的鱼分成了5份,扔掉多余的1条,拿走自己的1份;
C、D、E依此醒过来,都按照同样的方法来分鱼。问他们最少捕了多少条鱼?

fish = 1
while True:
    is_enough = True
    total = fish
    for _ in range(5):
        if (total - 1) % 5 == 0:
            total = (total -1) // 5 * 4
        else:
            is_enough = False
            break
    if is_enough:
        print(fish)
        break
    fish += 1

练习12:

猜数字游戏

计算机产生一个1-100的随机数,人输入自己猜的数字,
计算机给出对应的提示"大一点"、“小一点"或"恭喜你猜对了”,直到猜中为止。
如果猜的次数超过7次,计算机温馨提示"智商余额明显不足"。

import random
answer = random.randrange(1, 101)
i = 1
while True:
    num = int(input('请输入一个数:'))
    i += 1
    if num > answer:
        print('小一点')
    if num < answer:
        print('大一点')
    if num == answer:
        print('猜对了')
        break
    if i > 7:
        print('智商余额明显不足')
        break

练习13:

输入10个1-99的整数,计算平均值,找出最大值和最小值

total, counter= 0, 0
max_value, min_value = 0, 100
while counter < 10:
    temp = int(input('请输入:'))
    if temp < 1 or temp >= 100:
        print('无效输入')
        continue
    counter += 1
    total += temp
    if temp > max_value:
        max_value = temp
    if min_value > temp:
        min_value = temp
print(f'平均值:{total / 10}')
print(f'max:{max_value}')
print(f'min:{min_value}')

continue —> 只能用在循环中,让循环直接进入下一个轮次,忽略掉当前轮次后续的代码

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值