周四作业答案

1 .根据输入的成绩的范围打印及格 或者不及格。

grade = 67
if grade >= 60:       # grade:67 > 60;若不满足-》不及格
    print('及格')      # 及格
else:                 # 不执行
    print('不及格')

2.根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!

print('===============第1题================')
age = 89

# 方法一: if嵌套
if 0 <= age <= 150:         # age:89 满足条件;若不满足-》不是人
    if age >= 18:           # age:89 > 18;   若不满足-》未成年
        print('成年')        # 成年
    else:                   # 不执行
        print('未成年')
else:                       # 不执行
    print('不是人!')

# 方法二:
if age < 0 or age > 150:     # age:89 -> False -》跳过
    print('不是人!')
elif age >= 18:              # age:89 > 18 True
    print('成年人')           # 成年人
else:                        # 不执行
    print('未成年人')

3.输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数。

print('===============第2题================')
a = 34
b = 21
# 方法一:
result = a-b if (a-b) & 1 else '结果不是奇数'         # a:34 - b:21 = 13 按位与 1 -> True
print(result)                                       # 13

# 方法二:
if (a-b) & 1 == 1:                                  # a:34 - b:21 = 13 按位与 1 -> True == 1 -> True
    print(a-b)                                      # 13
else:                                               # 不执行
    print('结果不是奇数')

# 3.使用while循环输出 0~100内所有3的倍数。
print('===============第3题================')
# 方法一:
num = 0
while True:
    num += 3
    if num > 100:
        break
    print(num)

'''
num:0
True -》 num = 0+3 -》 num:3 > 100 -> False -》 print:3
True -》 num = 3+3 -》 num:6 > 100 -> False -》 print:6
True -》 num = 6+3 -》 num:9 > 100 -> False -》 print:9
...
...
True -》 num = 96+3 -》 num:99 > 100 -> False -》 print:99
True -》 num = 99+3 -》 num:102 > 100 -> True -》 break
'''
print('========================================')
num = 0
while num <= 100:
    num += 3
    print(num)

'''
num:0
num:0 <= 100 -> True 》 num= 0+3 》 print:3
num:3 <= 100 -> True 》 num= 3+3 》 print:6
...
...
num:96 <= 100 -> True 》 num= 96+3 》 print:99
num:99 <= 100 -> True 》 num= 99+3 》 print:102  ???????????????
num:102 <= 100 -> False 》 结束
'''

4.使用循环计算1234…*10的结果。

print('===============第4题================')
sum1 = 1
for num in range(1, 11):
    sum1 *= num
print(sum1)
'''
sum1:1
num:1 》 sum1=1*1=1
num:2 》 sum1=1*2=2
num:3 》 sum1=2*3=6
...
...
num:9 》 sum1=5040*9=40320
num:10 》 sum1=362880*10=3628800
'''

5.统计100以内个位数是2并且能够被3整除的数的个数。

print('===============第5题================')
# 方法一:
count = 0
for num in range(100):
    if num % 10 == 2 and num % 3 == 0:
        count += 1
print(count)
'''
count:0
num:0 》 0%10 -> 0==2 -> False 
num:1 》 1%10 -> 1==2 -> False
num:2 》 2%10 -> 2==2 -> True and 2%3 -> 2 == 0 -> False
...
num:12 》 12%10 -> 2==2 -> True and 12%3 -> 0==0 -> True 》 count:1
...
'''

# 方法二:
count = 0
for num in range(0, 100, 3):
    if num % 10 == 2:
        count += 1
print(count)
'''
count:0
num:0 -> 0%10:0 == 2 -> False
num:3 -> 3%10:3 == 2 -> False
..
num:12 -> 12%10:2 == 2 -> True 》 count:1
..
'''

# 方法三:
count = 0
for num in range(2, 100, 10):
    if num % 3 == 0:
        count += 1
print(count)
'''
count:0
num:2 》 2%3:2 ==0 -> False
num:12 》 12%3:0 ==0 -> True 》 count:1
num:22 》 22%3:1 ==0 -> False 
...
num:42 》 42%3:0 ==0 -> True 》 count:2
...
'''

6.输入任意一个正整数,求他是几位数?

"""
123(3) - 123//10 -> 12//10 -> 1//10 -> 0
78(2)  -  78//10 -> 7//10 -> 0
3(1) -  3//10 -> 0
0(1) -  0//10 -> 0
23424(5) - 23424//10 -> 2342//10 -> 234//10 -> 23//10 -> 2//10 -> 0
"""
print('===============第6题================')
num = 10
count = 0
while True:
    num //= 10
    count += 1
    if num == 0:
        break
print(count)
'''
num:10, count:0
True 》 num:10 //10 -> num:1, count+1:1 》 num:1 ==0 -> False
True 》 num:0 //10 -> num:0, count+1:2 》 num:0 ==0 ->True 》 break 》 print(count:2)
'''

7.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

# ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。
print('===============第7题================')
for num in range(100, 1000):
    ge = num % 10
    shi = num // 10 % 10    # shi = num % 100 // 10
    bai = num // 100
    if ge**3 + shi**3 + bai**3 == num:
        print(num)
'''
num:100 》 ge=100%10: 0 》 shi=100//10%10: 0 》 bai=100//100: 1 》 0**3 + 0**3 + 1**3: 1 ==100 -> False
num:101 》 ge=101%10: 1 》 shi=101//10%10: 0 》 bai=101//100: 1 》 1**3 + 0**3 + 1**3: 2 ==101 -> False
num:102 》 ge=102%10: 2 》 shi=102//10%10: 0 》 bai=102//100: 1 》 2**3 + 0**3 + 1**3: 9 ==102 -> False
...
...
num:153 》 ge=153%10: 3 》 shi=153//10%10: 5 》 bai=153//100: 1 》 3**3:27 + 5**3:125 + 1**3:1: 153 ==153 -> True 》 print(num:153)
...
'''

8.判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

"""
思路:N是否是素数就看在2~N-1之间有没有一个数能够被N整除
"""
print('===============第8题================')
num = 121

# 方法一:
for x in range(2, num):      # 若 x:2~num-1 之间有num的因子
    if num % x == 0:         # 那么 num % x ==0
        print('不是素数')      # 不是素数
        break                # 判断完毕,循环结束
else:                        # 循环完毕,2~num-1 之间没有num的因子
    print('素数')             # 素数

# 方法二:(优化循环次数)
# x = m*n (m较小、n较大,那么m一定是小于等于x的开平方)
for x in range(2, int(num**0.5)+1):  # x:2~num开方,若num不是素数,它的因子对中较小的那个,不会大于num的开方,可节约一半时间
    if num % x == 0:                 # 若 x 是num的因子:
        print('不是素数')              # 不是素数
        break                        # 判断完毕,结束循环
else:                                # 循环完毕,没有因子
    print('素数')                     # 素数

9.求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

# 有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
"""
1月兔    2月兔     3月兔
1       0         0                 1
0       1         0                 1
1       0         1                 2
1       1         1                 3
2       1         2                 5
3       2         3                 8
5       3         5                13
"""
print('===============第9题================')
n = 6
if n == 1 or n == 2:          # 若月数不过3
    print(1)                  # 就只有原来那对兔子
else:                         # 若月数过3
    p1 = p2 = 1               # 新生的1对,成熟和马上成熟的1对
    for x in range(n-3):      # x: 0~n-4,循环n-3次,第3月输出p1+p2=1+1=2
        p1, p2 = p2, p1+p2    # 新生的=上个月成熟和马上成熟的,成熟和马上成熟的=上个月新生的+上个月成熟和马上成熟的
    print(p1+p2)
'''
p1:1, p2:1
x:0 》 p1: 1, p2=1+1: 2 p1+p2: 3
x:1 》 p1: 2, p2=1+2: 3 p1+p2: 5
x:2 》 p1: 3, p2=2+3: 5 p1+p2: 8
x:3 》 p1: 5, p2=3+5: 8 p1+p2: 13
...
'''

10.输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

print('===============第10题================')
for line in range(1, 10):
    for col in range(1, line+1):
        print(col, '×', line, '=', col*line, end='  ')
    # 一行结束后换行
    print()
'''
line:1 》 col:1 》 col: 1 x line: 1 = 1 -> col == line 换行
line:2 》 col:1 》 col: 1 x line: 2 = 2
line:2 》 col:2 》 col: 2 x line: 2 = 4 -> col == line 换行
line:3 》 col:1 》 col: 1 x line: 3 = 3 
line:3 》 col:2 》 col: 2 x line: 3 = 6 
line:3 》 col:3 》 col: 3 x line: 3 = 9 -> col == line 换行 
...
'''

11.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

print('===============第11题================')
for b in range(0, 100//3+1):                          # 大马不超过100(担)//3 只
    for m in range(0, 100//2+1):                      # 中马不超过100(担)//2 只
        s = 100-b-m                                   # 小马=100(只)-大马中马
        if b*3 + m*2 + s*0.5 == 100:                  # 若大马*3担 + 中马*2担 + 小马*0.5担 == 100担
            print('大马:', b, '中马:', m, '小马:', s)    # 则输出
'''
b:0 》 m:0 》 s:100 》 0*3 + 0*2 + 100*0.5: 50==100 -> False
b:0 》 m:1 》 s:99 》 0*3 + 1*2 + 99*0.5: 51.5==100 -> False
b:0 》 m:2 》 s:98 》 0*3 + 2*2 + 98*0.5: 53==100 -> False
...
b:1 》 m:0 》 s:99 》 1*3 + 0*2 + 99*0.5: 52.5==100 -> False
...
b:2 》 m:30 》 s:68 》 2*3 + 30*2 + 68*0.5: 100==100 -> True 》 print:2,30,68
...
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值