4. 三位数偶数
编写程序,输出由 1、2、5、8 这四个数字组成的每位数字都不相同的所有三位数偶数。
(1)思路
通过穷举法,将每种可能穷举出来,如果满足三个数字都不同的条件则输出并将计数器加一。
(2)编程并实现
# 定义列表以存各个数字 num = [1, 2, 5, 8] # 定义计数器 count = 0 # 暴力穷举每一种可能 for i in range(0, 4): for j in range(0, 4): for k in range(0, 4): if (i != j and i != k and j != k): count += 1 print(num[i]*100+num[j]*10+num[k]) # 统计总数字个数 print("There are", count, "different numbers.")
通过暴力穷举每一种可能,并判断是否各个数位都不同,如果满足条件则输出并将计数加一。
(3)运行并测试
开始运行后结果输出如下:
5. 百钱买汽水问题
假设大瓶汽水5元一瓶,中瓶汽水3元一瓶,小瓶汽水1元三瓶,现在有 100 块钱,想买 100 瓶汽水,列出所有的买法 (提示:4 种)。
(1)思路
暴力穷举每一种可能的购买情况,并判断是否为符合题意的购买,如果符合则将大中小各买多少瓶输出。如果不符合则进行下一组尝试。
(2)编程并实现
# 暴力穷举每一种可能 i in range(0, 21): for j in range(0, 34): # 如果超过100元则开始尝试下一组 if 5 * i + 3 * j > 100: break # 如果符合则输出 if i + j + (100 - 5 * i - 3 * j) * 3 == 100: print("large:", i, "medium:", j,"small:", (100 - 5 * i - 3 * j) * 3)
暴力穷举每一种购买的可能,如果符合条件则输出。
(3)运行并测试
开始运行后输出结果如下:
6. 乘方
编写程序,输入正整数a,按照以下格式输出乘方结果。
1 2 1
2 3 8
3 4 81
4 5 1024
5 6 15625
…
a a+1 a**(a+1)
(1)思路
先读入数字num,再通过for循环依次循环遍历每一个数值,并输出对应的数值
(2)编程并实现
# 输入num num = eval(input("Please input a number:")) for i in range(1, num+1): print(i, i + 1, i ** (i + 1))
先输入num,并利用for循环进行遍历依次输出
(3)运行并测试
①开始运行程序,将提示输入一个数字:
②输入对应数字后将输出对应乘方:
7. 阶乘
编写代码以按相反顺序打印阶乘结果。例如输入 n=10,文字输出为小于等于n的所有合数的阶乘(注:n的阶乘是123*…*n;不能使用math.factorial() 函数)。
10!: 3628800
9!: 362880
8!: 40320
6!: 720
4!: 24
(1)思路
先读入数字num,再通过for循环利用做差完成反向运算,对于每一个数字,通过for循环依次做除法判断是否为其因子的方式来判断是否为合数,如果是合数则再利用for循环计算阶乘,如果不是,则判断下一个数字。
(2)编程并实现
# 输入num num = eval(input("Please input a number:")) # 通过for进行遍历判断并输出 for i in range(1, num + 1): # 如果小于等于2 一定不是合数 if num + 1 - i <= 2: continue # 循环做除法判断是否为质数 flag = 2 while flag < num - i: if (num + 1 - i) % flag == 0: break flag += 1 # 如果是质数 if flag == num - i: continue # 是合数则输出 print(num + 1 - i, end="") print("!:", end="") res = 1 # 通过循环计算阶乘 for j in range(1, num + 2 - i): res *= j print(res)
先输入数字,然后通过for循环进行依次循环判断,此处为了实现倒序输出,需要进行做差。获取输入后,对于每一个数字,先通过for循环来判断是否为合数,如果是合数则再通过for循环计算阶乘并输出,如果不是,则对下一个数进行判断。
(3)运行并测试
①编写
② 输入对应数字后将计算并输出结果:
8. 计算最大公约数
找到两个整数的最大公约数 (the greatest common divisor: GCD)
例子:
Enter the first number: 12 Enter the second number: 6 GCD of 12 and 6 is 6
(1)思路
先读入两个数字,然后通过欧几里得辗转相除法计算最大公约数。
(2)编程并实现
# 输入两个数字 a = num1 = eval(input("Enter the first number: ")) b = num2 = eval(input("Enter the second number: ")) # 利用欧几里得辗转相除法计算最大公因数 temp = num1 % num2 while temp != 0: num1 = num2 num2 = temp temp = num1 % num2 # 输出结果 print("GCD of", a, "and", b, "is", num2)
先输入数字,然后通过欧几里得辗转相除算法获取最大公因数。
(3)运行并测试
①运行程序,将提示输入两个数字:
②输入完成后即输出结果:
实验结论
通过本次实验,我学会了Python的基本语法,循环,判断等使用,学会了使用Python对代码进行编写。也明白了Python与之前学习的C/C++,Java有一些不同之处,比如嵌套关系使用缩进而不是使用大括号表示等等。
在本次编程过程中,也遇到了一些问题:
由于Python有数据类型自动识别,有时会产生不必要的精度损失,需要进行类型的强制转换,比如本次实验的第二题,如果不对num进行类型转换,将发生精度损失而导致错误。
要对特殊数据进行特殊分析。在编写第七题的代码时,最开始忘记考虑1既不是质数也不是合数而发生错误
这些都告诉我们,在进行代码编写的过程中,务必要认真仔细,如果不仔细可能会发生失之毫厘谬以千里的事情!