编译环境:Python3.8,PyCharm2020.2
1.青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。请问该青蛙跳上一个n级的台阶总共有多少种跳法。
输入台阶数,输出一共有多少种跳法。
代码如下:
n = eval(input())
def jump(m):
if (m == 1) or (m == 2):
return m
else:
return jump(m - 1) + jump(m - 2)
print(jump(n))
运行结果如下图:
2.回文判断
一个字符串,如果各字符反向排列与原字符串相同,则称为回文,如“上海自来水来自海上”,用户输入一个字符串,判断该字符串是否为回文,如是回文输出“True”,否则输出“False”。
代码如下:
s = input()
length = len(s)
i = 0
j = length - 1
flag = 0
while i <= j:
if s[i] == s[j]:
flag = 1
i += 1
j -= 1
else:
flag = 0
break
if flag == 0:
print("False")
else:
print("True")
运行结果如下图:
3.猜数游戏
随机产生一个预设整数,范围在0~100之间,输出提示信息"Please input:"让用户输入所猜的数:
如果大于预设的数,输出"Too big! "
如果小于预设的数,输出"Too small!"
如果输入出错,给出"Please input integer! "
如此循环,直至猜中该数,显示“ N times,you got it!”,其中N是用户输入数字的次数。
用random.seed(125)指定种子
代码如下:
import random
random.seed(125)
n = random.randint(0, 100)
count = 0
while 1:
m = input("Please input:")
if m.isdigit():
m = int(m)
if m > n:
print("Too big!")
count += 1
elif m < n:
print("Too small!")
count += 1
else:
count += 1
print("{} times,you got it!".format(count))
break
else:
print("Please input integer!")
运行结果如下图:
4.横向排版转竖向排版
中国的古人写文章或诗词,是从右向左竖向排版的。请编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(最后一列可能不足N个,用空格补齐)。
代码如下:
n = eval(input())
s = input()
# 补空格,使字符串总长度是每列字符个数的整数倍
if len(s) % n != 0:
s += ' ' * (n - len(s) % n)
for i in range(n):
line = s[i::n] # 第i个、第i+n个、第i+2*n个……
print(line[::-1]) # 逆序输出
运行结果如下图:
5.切蛋糕问题
一块蛋糕,切一刀可以分成两块;切2刀最多可分成4块。计算切n刀,最多能切出多少块蛋糕?
代码如下:
def function(m):
if m == 1:
return 2
else:
return m + function(m - 1)
n = eval(input())
if n == 1:
print("2")
else:
print(function(n))
运行结果如下图:
6.汉诺塔
古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。要求输出移动的步骤。
代码如下:
def move(n, a, b, c):
if n == 1:
print("{}-->{} ".format(a, c), end="")
return
move(n - 1, a, c, b)
move(1, a, b, c)
move(n - 1, b, a, c)
n = eval(input())
if 1 <= n <= 64:
move(n, "A", "B", "C")
else:
print("data error. 1 <= n <= 64")
运行结果如下图:
7.IP地址合法性检验
互联网上的每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由 '.' 分隔开的4个数字组成,每个数字的取值范围是0-255。
现在用户输入一个字符串(不含空白符,不含前导0,如001直接输入1),请你判断s是否为合法IP,若是,输出'Yes',否则输出'No'。
代码如下:
ip = input()
data = ip.split(".")
if len(data) == 4:
# ip地址合法性检测
flag = 0
for i in range(0, 4):
if data[i].isdigit() and 0 <= int(data[i]) <= 255:
flag = 0
else:
flag = 1
break
# 输出结果
if flag == 0:
print("Yes")
else:
print("No")
else:
print("No")
运行结果如下图:
8.求素数
计算1~n之间的素数,并以列表的形式输出。
代码如下:
import sys
# function函数用于判断是否为素数
def function(x):
if x == 1:
return 0
if x == 2:
return 1
flag = 1
# flag=1是素数,flag=0不是素数
for j in range(2, x):
if x % j == 0:
flag = 0
break
return flag
n = eval(input())
if n == 2:
print("[2]")
sys.exit(0)
a = list()
for i in range(1, n):
if function(i):
a.append(i)
print(a)
运行结果如下图:
9.三位水仙花数
"3位水仙花数"是指一个三位整数,其各位数字的3次方之和等于该数本身。
代码如下:
n = input()
sum = 0
if n.isdigit():
for i in range(3):
sum += int(n[i]) ** 3
if sum == int(n):
print("YES")
else:
print("NO")
else:
print("Input Error")
运行结果如下图:
10.反素数
反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的数。
输入正整数n,输出前n各反素数。
代码如下:
def judge(m):
# 素数判断
flag = 1
if m == 1:
return 0
elif m == 2:
return 1
else:
for i in range(2, m):
if m % i == 0:
flag = 0
break
else:
flag = 1
return flag
def revert(m):
# 逆序
m = str(m)
m = m[-1::-1]
m = int(m)
return m
n = eval(input())
j = 2
count = 0
while count < n:
k = revert(j)
if judge(j) and judge(k):
print(j, end=" ")
count += 1
j += 1
运行结果如下图:
11.斐波那契(Fibonacci)数列
任意输入Fibonacci数列的第n项,输出第n项所对应的数。
代码如下:
def function(m):
if m == 1 or m == 2:
return 1
else:
return function(m - 1) + function(m - 2)
n = eval(input())
print(function(n))
运行结果如下图:
12.凯撒密码
对于原文字符P,其密文字符C满足如下条件:C = (P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P = (C-3) mod 26
假设用户可能使用的输入仅包含西文字母,即英文大小写字母a-z和A-Z和特殊字符,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中特殊字符不进行加密处理。
代码如下:
s = input()
out = ""
for i in s:
if 'a' <= i <= 'z':
i = chr(ord('a') + (ord(i) - ord('a') + 3) % 26)
print(i, end="")
elif 'A' <= i <= 'Z':
i = chr(ord('A') + (ord(i) - ord('A') + 3) % 26)
print(i, end="")
else:
print(i, end="")
运行结果如下图:
13.蒙特卡洛法求积分
使用蒙特卡洛法求x平方在区间[0,3]上的定积分(精确到小数点后1位)
代码如下:
import random
n = eval(input())
count = 0
for i in range(0, n):
x = random.uniform(0, 3)
y = random.uniform(0, 9)
if y <= x ** 2:
count = count + 1
value = 27.0 * count / n
print("{:.1f}".format(value))
运行结果如下图:
14.近似计算圆周率
代码如下:
import random
num = eval(input('input random numbers:'))
count = 0
for i in range(1, num + 1):
x = random.random()
y = random.random()
if (x - 0.5) ** 2 + (y - 0.5) ** 2 <= 0.25:
count = count + 1
pi_value = 4.0 * count / num
print('PI value= ', pi_value)
运行结果如下图:
15.二分法计算立方根
代码如下:
x = eval(input()) # 计算x的立方根
if x < 0:
flag = 0 # 标志位
x *= -1 # 取正值计算
else:
flag = 1
y = 0.01 # 精确度
low = 0
high = x
mid = (low + high) / 2.0 # 取二分之一
while abs(mid ** 3 - x) >= y: # 控制精确度
if mid ** 3 > x:
high = mid
else:
low = mid
mid = (low + high) / 2.0
# 按正负分别输出,保留两位小数
if flag == 1:
print("{:.2f}".format(mid))
else:
mid *= -1
print("{:.2f}".format(mid))
运行结果如下图:
16.字符串排序输出
输入3个字符串,按由小到大的顺序输出。
代码如下:
s = [] # 读取字符串
for i in range(0, 3):
s.append(input())
for i in range(0, 3): # 字符串排序
for j in range(i + 1, 3):
if s[i] > s[j]:
s[i], s[j] = s[j], s[i]
print("\nOutput:")
for i in s: # 输出
print(i)
运行结果如下图:
17.字符出现次数统计
输入任意字符串(包括数字),输出字符串中任意一个字符(或数字)出现的次数。
代码如下:
import collections
s = input()
x = input()
c = collections.Counter(s)
print(c)
print(c[x])
运行结果如下图:
18.排序算法
代码如下:
s = eval(input())
s = list(s)
n = len(s)
for i in range(0, n):
for j in range(i + 1, n):
if s[i] < s[j]:
s[i], s[j] = s[j], s[i]
print(s)
运行结果如下图:
19.安斯库姆四重奏
代码如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('4.csv')
fig = plt.figure(figsize=(10, 7))
ax1 = plt.subplot(2, 2, 1)
plt.scatter(df.x1, df.y1)
plt.title("x1-y1")
ax2 = plt.subplot(2, 2, 2)
plt.scatter(df.x2, df.y2)
plt.title("x2-y2")
ax3 = plt.subplot(2, 2, 3)
plt.scatter(df.x3, df.y3)
plt.title("x3-y3")
ax4 = plt.subplot(2, 2, 4)
plt.scatter(df.x4, df.y4)
plt.title("x4-y4")
plt.show()
print("平均值:\n{}\n\n中位值:\n{}\n\n方差:\n{}\n\n标准方差:"
"\n{}\n".format(df.mean(), df.median(), df.var(), df.std()))
运行结果如下图: