day5-作业

基础

读程序,总结程序的功能:

numbers = 1
for i in range(0,20):
 numbers * = 2
print(numbers)

执行数字2的20次方

summation = 0
num = 1
while num <= 100:
    if (num % 3 == 0 or num % 7 == 0) and num % 21 != 0:
         summation += 1
    num += 1
print(summation)

统计数字(1~100)中,能被3整除或者被7整除,但不能同时被3和7整除的数的个数。

编程实现(for和while各写一遍):

  1. 求1到100之间所有数的和、平均值
    for:
sum1 = 0
for num in range(1,101):
    sum1 += num
print('1~100的和:%d' % sum1)
average = sum1 / 100
print('1~100的平均值:%d' % average)

1~100的和:5050
1~100的平均值:50

while:

num = 1
sum1 = 0
while num <= 100:
    sum1 += num
    num += 1
print('1~100的和:%d' % sum1)
average = sum1 / 100
print('1~100的平均值:%d' % average)

1~100的和:5050
1~100的平均值:50

  1. 计算1-100之间能3整除的数的和
    for:
sum1 = 0
for num in range(1,101):
    if num % 3 == 0:
        sum1 += num
print('被3整除的数的和:%d' % sum1)

被3整除的数的和:1683

while:

sum2 = 0
num1 = 1
while num1 <= 100:
    if num1 % 3 == 0:
        sum2 += num1
    num1 += 1
print('被3整除的数的和:%d' % sum2)

被3整除的数的和:1683

  1. 计算1-100之间不能被7整除的数的和
    for:
sum1 = 0
for num in range(1,101):
    if num % 7 == 0:
        continue
    sum1 += num
print('不能被7整除的数的和:%d' % sum1)

不能被7整除的数的和:4315

while:

sum2 = 0
num1 = 1
while num1 <= 100:
    if num1 % 7 != 0:
        sum2 += num1
    num1 += 1
print('不能被7整除的数的和:%d' % sum2)

不能被7整除的数的和:4315


稍微困难

  1. 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34....
f1 = 1
f2 = 1
fn = 0
n = int(input("请输入斐波那契数列第n个数:"))
for n in range(1, n + 1):
    if n == 1:
        f1 = 1
    elif n == 2:
        f2 = 1
    else:
        fn = f1 + f2
        f1 = f2
        f2 = fn
print("第%d个斐波那契数列的值:%d" % (n, fn))

例:请输入斐波那契数列第n个数:15
第15个斐波那契数列的值:610

  1. 判断101-200之间有多少个素数,并输出所有素数。判断素数的方法:用一个数分别除2到sqrt(这个
    数),如果能被整除,则表明此数不是素数,反之是素数
count = 0
for num1 in range(101,201,2):
    for num2 in range(2,num1) :
        if num1 % num2 == 0:
            break
    else:
        count += 1
        print(num1)
print("素数的个数:%d" % count)

101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
素数的个数:21

  1. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是
    一个水仙花数,因为153 = 1^3 + 5^3 + 3^3
print("所有水仙花数:" )
for num1 in range(100,1000):
    bw = num1 // 100
    sw = num1 // 10 % 10
    gw = num1 % 10
    if num1 == bw ** 3 + sw ** 3 + gw ** 3:
        print(num1)

所有水仙花数:
153
370
371
407

  1. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数
    分子:上一个分数的分子加分母
    分母: 上一个分数的分子 fz = 2 fm = 1 fz+fm / fz
import fractions
fz = 2
fm = 1
n = int(input("请输入第n个分数序列:"))
for n in range(1,n+1):
    if n == 1:
        num1 = fractions.Fraction(fz, fm)
    else:
        fz = fz + fm
        fm = fz - fm
        num1 = fractions.Fraction(fz, fm)
print(num1)

请输入第n个分数序列:20
第20个分数值: 17711/10946

  1. 给一个正整数,要求:1、求它是几位数 2.逆序打印出各位数字
num1 = input("请输入一个正整数:")
str1 = str(num1)
print("这个整数是%d位数" % len(str1))
print("逆序打印:")
for index in range(0,len(str1)):
    print(str1[len(str1)-1-index])

例:请输入一个正整数:256578745
这个整数是9位数
逆序打印:
5
4
7
8
7
5
6
5
2


提高

1.控制台输入年龄,根据年龄输出不同的提示(例如:老年人,青壮年,成年人,未成年,儿童)

age = int(input("请输入年龄:"))
if age < 12:
    print("儿童")
elif age < 18:
    print("未成年")
elif age < 30:
    print("成年人")
elif age < 50:
    print("青壮年")
elif age > 50:
    print("老年人")

例:
请输入年龄:23
成年人

2.计算5的阶乘 5!的结果是

sum1 = 1
for num1 in range(1,6):
    sum1 *= num1
print("5的阶乘5!的结果是:%d" % sum1)

5的阶乘5!的结果是:120

3.求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。

sum1 = 1
sum2 = 0
for num1 in range(1,21):
    for num2 in range(1,num1+1):
        sum1 *= num2
    sum2 += sum1
    sum1 = 1
print("1+2!+3!+...+20!的结果是:%d" % sum2)

1+2!+3!+...+20!的结果是:2561327494111820313

4.计算 1+1/2!+1/3!+1/4!+...1/20!=?

import fractions
sum1 = 1
sum2 = 0
num3 = 0
for num1 in range(1, 21):
    for num2 in range(1,num1+1):
        sum1 *= num2
        num3 = fractions.Fraction(1, sum1)
    sum2 += num3
    sum1 = 1
print("1+1/2!+1/3!+1/4!...+1/20!的结果是:%.2f" % sum2)

1+1/2!+1/3!+1/4!...+1/20!的结果是:1.72

5.循环输入大于0的数字进行累加,直到输入的数字为0,就结束循环,并最后输出累加的结果。

value = int(input("请输入:"))
sum1 = value
while value != 0:
    value = int(input("请输入:"))
    sum1 += value
print("输入数字的和:%d" % sum1)

例:请输入:3
请输入:6
请输入:7
请输入:4
请输入:2
请输入:5
请输入:9
请输入:1
请输入:0
输入数字的和:37

6.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。

a = int(input("请输入一个数字:"))
b = int(input("请输入相加个数:"))
sum1 = 1
s = 0
for num1 in range(1, b+1):
    for num in range(1, num1+1):
        sum1 = a * 10 ** (num-1)
        s += sum1
print("所有数值之和:%d" % s)

例:请输入一个数字:2
请输入相加个数:5
所有数值之和:24690

7.输入三个整数x,y,z,请把这三个数由小到大输出。

x = int(input("请输入:x="))
y = int(input("请输入:y="))
z = int(input("请输入:z="))
num1 = max(x, y, z)
num2 = min(x, y, z)
num3 = x + y + z - num1 - num2
print(num2, num3, num1)

请输入:x=2
请输入:y=4
请输入:z=3
2 3 4

8.控制台输出三角形

a.根据n的值的不同,输出相应的形状
n = 5时                n = 4
*****                  ****
****                   ***
***                    **
**                     *
*
str1 = '*'
n = int(input("n="))
str2 = str1 * n
for i in range(n):
    print(str2[:n])
    n -= 1

例:
n=5
*****
****
***
**
*

b.根据n的值的不同,输出相应的形状(n为奇数)
n = 5               n = 7
  *                    *
 ***                  ***
*****                *****
                    *******
str1 = '*'
n = int(input("请输入一个奇数:n="))
for i in range((n+1) // 2):
    str2 = str1.center(n, ' ')
    print(str2)
    str1 += '*'
    str1 += '*'
例:
n=7
   *  
  *** 
 *****
*******

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

for i in range(1, 10):
    for j in range(1, i+1):
        num1 = i * j
        print("%d * %d = %d" % (j, i, num1), '\t', end='')
        if i == j:
            print('')
1 * 1 = 1   
1 * 2 = 2   2 * 2 = 4   
1 * 3 = 3   2 * 3 = 6    3 * 3 = 9  
1 * 4 = 4   2 * 4 = 8    3 * 4 = 12   4 * 4 = 16    
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36  
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49     
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64    
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81

10.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?

print("大马、中马、小马匹数有如下情况:")
for dm in range(1, 99):
    for zm in range(1, 99):
        for xm in range(1, 99):
            if dm + zm + xm == 100 and 3 * dm + 2 * zm + 0.5 * xm == 100:
                print(dm, zm, xm)

大马、中马、小马匹数有如下情况:
2 30 68
5 25 70
8 20 72
11 15 74
14 10 76
17 5 78

11.我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的: 5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。

print("公鸡、母鸡、雏鸡个数有如下情况:")
for gj in range(1, 99):
    for mj in range(1, 99):
        for cj in range(1, 99):
            if gj + mj + cj == 100 and 5 * gj + 3 * mj + 1/3 * cj == 100:
                print(gj, mj, cj)

公鸡、母鸡、雏鸡个数有如下情况:
4 18 78
8 11 81
12 4 84

12.小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元整好花掉,可如有哪些购买结合?

print("购买方式有如下情况:")
for xfs in range(0, 7):
    for xz in range(0, 51):
        for ys in range(0, 21):
            if 15 * xfs + 2 * xz + 5 * ys == 100:
                print("洗发水%d瓶,香皂%d块,牙刷%d支" % (xfs, xz, ys))

购买方式有如下情况:
洗发水0瓶,香皂0块,牙刷20支
洗发水0瓶,香皂5块,牙刷18支
洗发水0瓶,香皂10块,牙刷16支
洗发水0瓶,香皂15块,牙刷14支
洗发水0瓶,香皂20块,牙刷12支
洗发水0瓶,香皂25块,牙刷10支
洗发水0瓶,香皂30块,牙刷8支
洗发水0瓶,香皂35块,牙刷6支
洗发水0瓶,香皂40块,牙刷4支
洗发水0瓶,香皂45块,牙刷2支
洗发水0瓶,香皂50块,牙刷0支
洗发水1瓶,香皂0块,牙刷17支
洗发水1瓶,香皂5块,牙刷15支
洗发水1瓶,香皂10块,牙刷13支
洗发水1瓶,香皂15块,牙刷11支
洗发水1瓶,香皂20块,牙刷9支
洗发水1瓶,香皂25块,牙刷7支
洗发水1瓶,香皂30块,牙刷5支
洗发水1瓶,香皂35块,牙刷3支
洗发水1瓶,香皂40块,牙刷1支
洗发水2瓶,香皂0块,牙刷14支
洗发水2瓶,香皂5块,牙刷12支
洗发水2瓶,香皂10块,牙刷10支
洗发水2瓶,香皂15块,牙刷8支
洗发水2瓶,香皂20块,牙刷6支
洗发水2瓶,香皂25块,牙刷4支
洗发水2瓶,香皂30块,牙刷2支
洗发水2瓶,香皂35块,牙刷0支
洗发水3瓶,香皂0块,牙刷11支
洗发水3瓶,香皂5块,牙刷9支
洗发水3瓶,香皂10块,牙刷7支
洗发水3瓶,香皂15块,牙刷5支
洗发水3瓶,香皂20块,牙刷3支
洗发水3瓶,香皂25块,牙刷1支
洗发水4瓶,香皂0块,牙刷8支
洗发水4瓶,香皂5块,牙刷6支
洗发水4瓶,香皂10块,牙刷4支
洗发水4瓶,香皂15块,牙刷2支
洗发水4瓶,香皂20块,牙刷0支
洗发水5瓶,香皂0块,牙刷5支
洗发水5瓶,香皂5块,牙刷3支
洗发水5瓶,香皂10块,牙刷1支
洗发水6瓶,香皂0块,牙刷2支
洗发水6瓶,香皂5块,牙刷0支

你可能感兴趣的:(day5-作业)