python第四天

1、判断以下哪些不能作为标识符(BDEF)
    A、a
    B、¥a
    C、_12
    D、$a@12
    E、false
    F、False

2.输入数,判断这个数是否是质数(要求使用函数 + for循环)

def is_prime(num):
    """
    判断一个数是否为质数,是返回True,否则返回False
    """
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
 
# 测试
num = int(input("请输入一个整数:"))
if is_prime(num):
    print(f"{num}是质数")
else:
    print(f"{num}不是质数")
3:求50~150之间的质数是那些?

def is_prime(num):
    """
    判断一个数是否为质数,是返回True,否则返回False
    """
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
 
# 查找50~150之间的质数
for num in range(50, 151):
    if is_prime(num):
        print(num)
4:打印输出标准水仙花数,输出这些水仙花数

def is_narcissistic_number(num):
    """
    判断一个数是否为水仙花数,是返回True,否则返回False
    """
    n = len(str(num))
    temp = num
    sum = 0
    while temp > 0:
        digit = temp % 10
        sum += digit ** n
        temp //= 10
    return num == sum
 
# 查找所有的水仙花数
for num in range(100, 1000):
    if is_narcissistic_number(num):
        print(num)
5:验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

def is_divisible_by_9(num):
    """
    判断一个数减去它的各位数字之和是否能被9整除,是返回True,否则返回False
    """
    s = 0
    while num > 0:
        s += num % 10
        num //= 10
    return s % 9 == 0
 
# 测试
num = int(input("请输入一个大于9的整数:"))
if is_divisible_by_9(num):
    print(f"{num}减去它的各位数字之和可以被9整除")
else:
    print(f"{num}减去它的各位数字之和不能被9整除")
6:一个五位数,若在它的后面写上一个7,得到一个六位数A,
        若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此
        五位数.

# 计算得到的五位数
x = 699993 // 49
print(f"得到的五位数为:{x}")
 
# 验证
A = 10 * x + 7
B = 7 * 10 ** 5 + x
if B == 5 * A:
    print("验证通过")
else:
    print("验证不通过")
7:求十进制数字的二进制编码:

    求十进制数字的二进制编码中的1的数量
 

def count_ones_in_binary(num):
    """
    求一个十进制数字的二进制编码中1的数量
    """
    count = 0
    while num > 0:
        if num % 2 == 1:
            count += 1
        num //= 2
    return count
 
# 测试
num = int(input("请输入一个十进制数字:"))
count = count_ones_in_binary(num)
print(f"{num}的二进制编码中1的数量为{count}")
8:求1~100之间不能被3整除的数之和
 

# 计算不能被3整除的数之和
sum = 0
for i in range(1, 101):
    if i % 3 != 0:
        sum += i
 
# 输出结果
print(f"1~100之间不能被3整除的数之和为{sum}")
9:给定一个正整数N,找出1到N(含)之间所有质数的总和

def is_prime(num):
    """
    判断一个数是否为质数
    """
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
 
# 计算1到N之间所有质数的总和
N = int(input("请输入一个正整数:"))
sum = 0
for i in range(1, N + 1):
    if is_prime(i):
        sum += i
 
# 输出结果
print(f"1到{N}之间所有质数的总和为{sum}")
10:计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-1.......)

# 计算PI的值
N = int(input("请输入一个正整数:"))
pi = 0
for i in range(N):
    pi += 4 * (-1) ** i / (2 * i + 1)
 
# 输出结果
print(f"PI的值为{pi}")
11:求a+aa+aaa+.......+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定

# 计算a+aa+aaa+...+aaaaaaaaa的值
a = int(input("请输入1~9之间的数字:"))
n = int(input("请输入项数:"))
sum = 0
for i in range(1, n + 1):
    sum += int(str(a) * i)
 
# 输出结果
print(f"{a}+{a}{a}+{a}{a}{a}+...+{a}{'a'*n}={sum}")
12: 找出10000以内能被5或6整除,但不能被两者同时整除的数(函数)

def find_numbers():
    """
    找出10000以内能被5或6整除,但不能被两者同时整除的数
    """
    result = []
    for i in range(1, 10001):
        if (i % 5 == 0 or i % 6 == 0) and not (i % 5 == 0 and i % 6 == 0):
            result.append(i)
    return result
 
# 调用函数并输出结果
print(find_numbers())
13:不死兔子和跳楼梯问题
 

这两个问题都属于斐波那契数列问题的变种。
 
不死兔子问题:假设一对兔子每个月能够生出一对小兔子,而一对新生的兔子出生后第二个月就开始生育。假设初始时有一对年龄为1个月的兔子,问n个月后有多少对兔子?
 
跳楼梯问题:一个人可以跳1级台阶,也可以跳2级台阶,问他跳上n级台阶有多少种不同的方法?
 
斐波那契数列是这两个问题的通解,递推公式为:f(n) = f(n-1) + f(n-2),其中f(1) = 1,f(2) = 1。
 
以下是Python代码实现:
 
```python
def fibonacci(n):
    """
    计算斐波那契数列的第n项
    """
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
 
# 不死兔子问题
n = int(input("请输入月份:"))
print(f"经过{n}个月,共有{fibonacci(n)}对兔子。")
 
# 跳楼梯问题
n = int(input("请输入台阶数:"))
print(f"跳上{n}级台阶共有{fibonacci(n)}种不同的方法。")
```
 
在主程序中,先定义了一个名为 `fibonacci()` 的函数,该函数用于计算斐波那契数列的第n项。然后通过 `input()` 函数获取用户输入的月份或台阶数,调用 `fibonacci()` 函数计算结果并输出即可。
 
例如,输入月份10和台阶数10,程序输出:
 
```
经过10个月,共有55对兔子。
跳上10级台阶共有89种不同的方法。
```
14.汉诺塔问题

汉诺塔问题是一个经典的递归问题,其规则如下:
 
有三个柱子A、B、C,A柱子上有n个盘子,盘子大小不一,大的在下面,小的在上面。要求把A柱子上的盘子移到C柱子上,每次只能移动一个盘子,大盘子不能放在小盘子上面。在移动盘子的过程中可以利用B柱子作为中转。
 
以下是Python代码实现:
 
```python
def hanoi(n, A, B, C):
    """
    将n个盘子从A柱子经过B柱子移动到C柱子
    """
    if n == 1:
        print(f"将第{n}个盘子从{A}移动到{C}")
    else:
        hanoi(n-1, A, C, B)  # 将前n-1个盘子从A移动到B
        print(f"将第{n}个盘子从{A}移动到{C}")
        hanoi(n-1, B, A, C)  # 将前n-1个盘子从B移动到C
 
# 调用函数并输出结果
hanoi(3, 'A', 'B', 'C')
```
 
定义了一个名为 `hanoi()` 的函数,该函数使用递归实现汉诺塔问题的求解。其中,`n` 表示盘子的数量,`A`、`B`、`C` 分别表示三个柱子的名称。如果只有一个盘子,则直接将其从A移动到C;否则,先将前n-1个盘子从A移动到B,再将第n个盘子从A移动到C,最后将前n-1个盘子从B移动到C。
 
例如,当输入 `hanoi(3, 'A', 'B', 'C')` 时,程序输出:
 
```
将第1个盘子从A移动到C
将第2个盘子从A移动到B
将第1个盘子从C
/131252236

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值