Python练习:Demo31-Demo60

Demo31 打印菱形 II
题目描述
如下所示,是一个高度为 9 的菱形
用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n n 为奇数
输出该高度的菱形
示例
输入:
5
输出:
实现代码:
#打印空心菱形
n = eval(input("请输入需要打印的行数:"))
for i in range(1,n+1):
    for k in range(abs(n // 2 + 1 - i)):
        print("",end = " ")
    for j in range(1,n + 1):
        if j <= i and  i + j <= n + 1:
            if j == 1 or j == i or j + i == n + 1:
                print("*",end = " ")
            else:
                print(" ",end = " ")
    print()
Demo32 打印菱形 III
题目描述
如下所示,是一个高度为 9 的菱形
用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n n 为奇数
输出该高度的菱形
示例
输入:
5
输出:
实现代码:
#打印菱形
n = eval(input("请输入需要打印的行数:"))
for i in range(1, n + 1):
    for k in range(abs(n // 2 + 1 - i)):
        print(" ", end="")
    for j in range(1, n + 1):
        if i <= n // 2 + 1:
            if abs(n // 2 + 1 - i) + j <= n and j <= i * 2 - 1:
                print("*", end="")
        if i > n // 2 + 1:
            if i + j <= n + abs(n // 2 + 1) - abs(n // 2 + 1 -i):
                print("*", end = "")
    print()
Demo33 猜数字
题目描述
计算机随机生成一个 [0,100] 之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
对于用户输入的数字,程序会提示它是过高还是过低
输入输出描述
每次输入一个整数
每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束
示例
输入: 50
输出:高了
输入: 25
输出:低了
输入: 42
输出:高了
输入: 39
*
***
*****
*******
*********
*******
*****
***
*
*
***
*****
***
* 输出:猜中了!答案就是 39
实现代码:
#猜数字
import random 
ranNum = random.randint(0,100)
while True:
    userNum = eval(input("请输入一个数字:"))
    if ranNum < userNum:
        print("大了")
    elif ranNum > userNum:
        print("小了")
    else:
        print("恭喜你!")
        break
Demo34 最大公约数 I
题目描述
输入两个正整数,计算其最大公约数,例如 4 2 的最大公约数是 2 16 24 的最大公约数是 8
输入输出描述
输入两个数字
输出最大公约数
示例 1
输入:
16 24
输出:
8
示例 2
输入:
7 3
输出:
1
实现代码:
Demo34 最大公约数 I
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入输出描述
输入两个数字
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
Demo35 判断素数
题目描述
一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 3 5 7 都是素数,而 4
6 8 9 则不是
输入输出描述
输入一个大于 1 的正整数
输出 Yes 表示该数字是素数,否则输出 No
示例 1
输入:
9
输出:
No
示例 2
输入:
11
输出:
Yes
实现代码:
#判断素数
num = eval(input("请输入一个大于1的正整数:"))
flag = True
for i in range(2, num // 2 + 1):
    if num % i == 0:
        flag = False
        break
if flag:
    print("Yes")
else:
    print("No")
Demo36 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如 4 2 的最小公倍数是 4 3 5 的最小公倍数是 15
输入输出描述
输入两个正整数
输出最小公倍数
示例 1
输入:
3 9
输出:
9
示例 2
输入:
4 6
输出:
12
实现代码:
#最小公倍数
num1, num2 = eval(input("请输入两个正整数:"))
maxNum = max(num1, num2)
for i in range(maxNum, num1 * num2 + 1):
    if i % num1 == 0 and i % num2 == 0:
        print("最小公倍数为",i)
        break
Demo37 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
示例 1
输入:
120
输出:
2 2 2 3 5
解释:
2 * 2 * 2 *3 * 5 = 120
示例 2
输入:
100
输出: 2 2 5 5
实现代码:
#整数的素因子
num = eval(input("请输入一个正整数:"))
while num != 1:
    for i in range(2, num + 1):
        if num % i == 0:
            print(i,end=" ")
            num //= i
            break
Demo38 完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1 28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
示例 1
输入:
6
输出:
Yes
示例 2
输入:
9
输出:
No
实现代码:
num = eval(input("请输入一个正整数:"))
sum = 0
for i in range(1, num // 2 + 1):
    if num % i == 0:
        sum += i
if sum == num:
    print("Yes")
else:
    print("No")
Demo39 50 个素数
题目描述
打印前 50 个素数,每打印 10 个素数换行
实现代码:
#打印前五十个素数
num = 2
count = 0
while count < 50:
    flag = True
    for i in range(2, num // 2 + 1):
        if num % i == 0:
            flag = False
            break
    if flag:
        print(num, end="\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1
Demo40 计算 π
题目描述
你可以使用下面的数列近似计算 π
i 越大时,计算结果越近似于 π
实现代码:
#计算PI
import math

# 获取用户输入的迭代次数
iterations = int(eval(input("请输入迭代次数:")))

result = 0
for i in range(1,iterations + 1):
    result += (-1) ** (i + 1) * (1 / (2 * i - 1))

approx_pi = 4 * result

print(f"通过{iterations}次迭代,π的近似值为:{approx_pi}")
print(f"π的真实值为:{math.pi}")
Demo41 计算 e
题目描述
你可以使用下面的数列近似计算 e
i 越大时,计算结果越近似于 e
实现代码:
#求e的值
import math
iterations = eval(input("请输入迭代次数:"))
e = 1
for i in range(1,iterations+1):
        result = math.factorial(i)
        e += 1 / result
print(e)
Demo42 剪刀石头布 II
题目描述
延伸【 Demo21 剪刀石头布 I 】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者
实现代码:
#剪刀石头布
import random
computer_score = 0
user_score = 0
while computer_score < 3 or user_score < 3:
    # 计算机随机选择剪刀、石头或布
    computer_choice = random.randint(0, 2)

    # 将数字对应到剪刀、石头或布
    choices = ['剪刀', '石头', '布']

    # 获取用户输入
    user_input = int(input("请输入数字 0、1 或 2,分别代表剪刀、石头或布:"))
    user_choice = choices[user_input]

    # 输出计算机和用户的选择
    computer_choice_str = choices[computer_choice]
    print("计算机出的", computer_choice_str)
    print("用户出的", user_choice)

    # 判断胜负
    if user_input == computer_choice:
        print("平局")
    elif (user_input - computer_choice) == 1 or (user_input == 0 and computer_choice == 2):
        print("用户赢")
        user_score += 1
    else:
        print("计算机赢")
        computer_score += 1
    if user_score == 3:
        print("用户是终极胜利者")
        break
    if computer_score == 3:
        print("计算机是终极胜利者")
        break
Demo43 组合问题 I
题目描述
在数字范围 [1,7] 之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合( a b )与组合( b a )算同一种组合,只记录一次
实现代码:
#组合问题1
count = 0
for i in range(1,8):
    for j in range(i+1,8):
        print("组合 ({}, {})".format(i, j))
        count += 1
print("共有{}种组合".format(count))
Demo44 组合问题 II
题目描述
1 2 3 4 这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
实现代码:
#组合问题2
count = 0
for i in range(1, 5):
    bai = i
    for j in range(1, 5):
        if i != j:  # 第二位数与第一位数不相等
            shi = j
            for k in range(1, 5):
                if k != i and k != j:  # 第三位数与第一位数和第二位数都不相等
                    ge = k
                    print(bai * 100 + shi * 10 + ge)
                    count += 1

print("组合个数为", count)
Demo45 水仙花数
题目描述
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,编写程序,输出所有的水仙花数
实现代码:
for num in range(100,1000):
    ge = num % 10
    shi = num // 10 % 10
    bai = num // 100
    if ge ** 3 + shi ** 3 + bai ** 3 == num:
        print(num)
Demo46 青蛙跳台阶
题目描述
一只青蛙,一次可以跳一个台阶或者两个台阶,现有 n 个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法( 1+1 2 );四个台阶,有五种跳法( 1+1+1+1 2+1+1 1+2+1
1+1+2 2+2
实现代码:
#青蛙跳台阶
a = 1
b = 2
n = eval(input("请输入阶数:"))
if n == 1 or n == 2:
    print(n)
for n in range(3,n+1):
    c = a + b
    a = b 
    b = c
print(c)
Demo47 堆叠相加
题目描述
输入输出描述
输入两个数据分别为数字 a 和组数 n
输出按照堆叠相加模式算出的和
示例
输入:
3 4
输出: 3702
解释:
3 + 33 + 333 + 3333 = 3702
实现代码:
#堆叠相加
a, n =eval(input())
sum = 0
num = 0
for i in range(n):
    num = num * 10 + a
    sum += num
print(sum)
Demo48 十进制转二进制
题目描述
输入一个十进制正整数,输出其二进制形式
输入输出描述
输入一个十进制正整数
输出二进制字符串
示例
输入:
9
输出:
1001
实现代码:
#十进制转二进制
dec_num = int(input("输入一个十进制正整数: "))  # 接受用户输入的十进制正整数

if dec_num == 0:
    bin_str = "0"
else:
    bin_str = ""
    while dec_num > 0:
        remainder = dec_num % 2
        bin_str = str(remainder) + bin_str
        dec_num = dec_num // 2

print("输出二进制字符串:", bin_str)
Demo49 二进制转十进制
题目描述
输入一个二进制字符串,输出其对应的十进制数字
输入输出描述
输入一个二进制字符串
输出十进制数字
示例
输入:
1001
输出:
9
实现代码:
#二进制转十进制
num = input("输入二进制字符串:")
numList = list(map(int,num))
numList.reverse()
decNum = 0
for i in range(len(num)):
    decNum +=  numList[i] * (2 ** i)
print(decNum)
Demo50 十进制转十六进制
题目描述
输入一个十进制正整数,输出其十六进制形式
输入输出描述
输入一个十进制正整数
输出十六进制字符串
示例
输入: 1233321
输出:
1e1b9
实现代码:
#十转十六进制
s=""
num = eval(input("请输入一个十进制数:"))
while num != 0:
    y = num % 16
    if y >= 10:
       y = chr(ord("a") + y - 10)
    s=str(y)+ s
    num = num //16
print(s)
Demo51 十六进制转十进制
题目描述
输入一个十六进制字符串,输出其对应的十进制数字
输入输出描述
输入一个十六进制字符串
输出十进制数字
示例
输入:
1e1b9
输出:
123321、
实现代码:
#十六转十进制
sum = 0
n = input("请输入一个十六进制数字:")
for i in range(len(n)-1, -1, -1):#i的值可用于从位末取出各个字符串向前移动和作为16的次方数
    if int(n[i], 16) >= 10:
        num = ord(n[i]) - ord('a') + 10
    else:
        num = int(n[i])
    sum += num * (16 ** (len(n) - 1 - i))
print(sum)
Demo52 最长公共前缀
题目描述
给定两个字符串 s1 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
输入输出描述
输入两行,分别表示 s1 s2
输出前缀串
示例
输入:
abcdefg
abcdhko
输出:
abcd
实现代码:
#最长公共前缀
s1 = (input("请输入第一个字符串:"))
s2 = (input("请输入第二个字符串:"))
strSame = ""
minLen = min((len(s1), len(s2)))
for i in range(minLen):
    if s1[i] == s2[i]:
        strSame += s1[i]
print(strSame)
Demo53 子串出现的次数
题目描述
给定两个字符串 s1 s2 ,求 s2 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹
输入输出描述
输入两行字符串,分别为 s1 s2 s2 的长度小于等于 s1
输出 s2 s1 中出现的次数 示例 1
输入:
ABCsdABsadABCasdhjabcsaABCasd
ABC
输出:
3
示例 2
输入:
AAAAAAAA
AAA
输出:
2
实现代码:
#子串出现的次数
s1 = (input("请输入父字符串:"))
s2 = (input("请输入子字符串:"))
count = 0
i = 0
while i <= len(s1) - len(s2):
    if s1[i] == s2[0]:
        j = i + 1
        for k in range(1,len(s2)):
            if s2[k] != s1[j]:
                i += 1
                break
            j += 1
        else:
            count += 1
            i = j
    else:
        i += 1
print(count)
Demo54 最长公共子串
题目描述
给定两个字符串 s1 s2 ,求 s1 s2 之间的最长公共子串,字符区分大小写
输入输出描述
输入两行字符串,分别为 s1 s2
输出最长公共子串
示例
输入:
123ABCDEFG83hsad
iughABCDEFG23uy
输出:
ABCDEFG
实现代码:
#最长公共子串
def longest_common_substring(s1, s2):
    len1, len2 = len(s1), len(s2)
    max_len = 0
    end_index = 0

    for i in range(len1):
        for j in range(len2):
            k = 0
            while i+k < len1 and j+k < len2 and s1[i+k] == s2[j+k]:
                k += 1

            if k > max_len:
                max_len = k
                end_index = i + k

    return s1[end_index - max_len: end_index]

s1 = input()
s2 = input()
result = longest_common_substring(s1, s2)
print(result)


Demo55 检测密码
题目描述
一些网站会给密码强加一些规则:
1 )密码必须至少有 8 个字符
2 )密码只能包含英文字母和数字
3 )密码应该至少包含两个数字
4 )密码应该至少包含两个大写字母
如果密码符合规则,输出 Yes ;否则输出 No
输入输出描述 输入一串密码
输出该密码是否符合规则
示例 1
输入:
123456ab
输出:
No
示例 2
输入:
123abcABC
输出:
Yes
实现代码:
#检测密码
passwd = input("请输入你的密码:")
num = 0
capital = 0
flag = True
if len(passwd) >= 8:
    for p in passwd:
        char_code = ord(p)
        if not (48 <= char_code <= 57 or 65 <= char_code <= 90 or 97 <= char_code <= 122):
            flag = False
        if 48 <= char_code <= 57:
            num += 1
        if 65 <= char_code <= 90:
            capital += 1
if  not (num >= 2 and capital >= 2):
    flag = False
if flag:
    print("Yes")
else:
    print("No")  
Demo56 回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如 131 既是素数也是回文数
输出显示前 100 个回文素数,每行显示 10
实现代码:
#回文素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n // 2 + 1):
        if n % i == 0:
            return False
    return True
def is_palindrome(n):
    return str(n) == str(n)[::-1]
num = 2
count = 0
while count < 100:
    if is_prime(num) and is_palindrome(num):
        print(num, end = "\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1
Demo57 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如 17 71 都是素数但不是回文数,且反转
后依旧是素数
输出显示前 100 个反素数,每行显示 10
实现代码:
#反素数
def is_palindrome(n):
    return str(n) != str(n)[::-1]

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def reverse_is_prime(n):
    reversed_num = int(str(n)[::-1])
    if reversed_num < 2:
        return False
    for i in range(2, reversed_num // 2 + 1):
        if reversed_num % i == 0:
            return False
    return True

count = 0
num = 2
while count < 100:
    if is_palindrome(num) and is_prime(num) and reverse_is_prime(num):
        print(num, end="\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1




Demo58 双素数
题目描述
双素数是指一对差值为 2 的素数,例如 3 5 就是一对双素数, 5 7 也是一对双素数
输出显示小于 1000 的双素数
实现代码:
#双素数
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, n // 2 + 1):
        if n % i == 0:
            return False
    return True

def find_twin_primes():
    twin_primes = []
    for num in range(2, 1000):
        if is_prime(num) and is_prime(num + 2):
            twin_primes.append((num, num + 2))
    return twin_primes

twin_primes = find_twin_primes()
for twin_prime in twin_primes:
    print(f"{twin_prime[0]}和{twin_prime[1]}是一对双素数")
Demo59 梅森素数
如果一个素数可以写成(2 ^ p - 1)的形式,其中p 是某个正整数,那么这个素数就称作梅森素数
输出 p 31 的所有梅森素数
实现代码:
#梅森素数
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def find_mersenne_primes():
    mersenne_primes = []
    for p in range(1, 32):
        exponent = 2 ** p - 1
        if is_prime(exponent):
            mersenne_primes.append(exponent)
    return mersenne_primes

mersenne_primes = find_mersenne_primes()
for i in mersenne_primes:
    print(i,"是梅森素数")
Demo60 平方根的近似求法
有几种实现开平方
的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
nextGuess lastGuess 几乎相同时, nextGuess 就是平方根的近似值
lastGuess 初始值为 1 ,如果 nextGuess lastGuess 的差值小于一个很小的数,比如 0.0001 ,就可以认为nextGuess是 n 的平方根的近似值;否则, nextGuess 成为下一次计算的 lastGuess ,近似过程继续执行编写代码,求解n 的平方根的近似值
实现代码:
def sqrt_approximation(n):
    last_guess = 1
    next_guess = (last_guess + n / last_guess) / 2
    
    while abs(next_guess - last_guess) > 0.0001:
        last_guess = next_guess
        next_guess = (last_guess + n / last_guess) / 2
    
    return next_guess

n = float(input("请输入一个数: "))
result = sqrt_approximation(n)
print("平方根的近似值为:", result)

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值