编译环境: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()))

运行结果如下图:

运行结果

运行结果

最后修改:2020 年 10 月 30 日 09 : 12 PM