Python基础题31-60

Demo31:打印菱形 II

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, i + 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

n = eval(input())
for i in range(0, n):
    for j in range(abs(n // 2 - i)):
        print(" ", end = "")
    for k in range(1, n + 1):
        if k <= 2 * i + 1 and k <= 2 * (n - i) - 1:
            print("*", end = "")
    print()

Demo33:猜数字

计算机随机生成一个 [0,100] 之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
对于用户输入的数字,程序会提示它是过高还是过低
import random
randNum = random.randint(0 , 100)
usrNum = eval(input())
while randNum != usrNum:
    if usrNum < randNum:
        print("小了")
    elif usrNum > randNum:
        print("大了")
    usrNum = eval(input())
print("猜对了")
'''
while True:
    usrNum = eval(input())
    if usrNum < randNum:
        print("小了")
    elif usrNum > randNum:
        print("大了")
    else:
        print("猜对了")
        break
'''

Demo34:最大公约数 I

输入两个数字
输出最大公约数
a, b = map(int,input().split())
num = min(a, b)
for n in range(num, 0, -1):
    if a % n == 0 and b % n == 0:
        print(n)
        break

Demo35:判断素数

输入一个大于 1 的正整数
输出 Yes 表示该数字是素数,否则输出 No
num = eval(input())
flag = True    #设置哨兵
for n in range(2, num // 2 + 1):
    if num % n == 0:
        flag = False
        break
if flag:
    print("Yes")
else:
    print("No")

Demo36:最小公倍数

输入两个正整数
输出最小公倍数
a, b = map(int,input().split())
num = min(a, b)
for i in range(num, 0, -1):
    if a % i == 0 and b % i == 0:
        break
print(i)
print(a * b // i)

Demo37:整数的素因子

输入一个正整数
输出多行,每行输出一个素因子
num = eval(input(0))
while num != 1:
    for n in range(2, num + 1):
        if num % n == 0:
            print(n, end = " ")
            num = num // n
            break

Demo38:完全数

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1 28 = 14 + 7 + 4 + 2 + 1
输入一个正整数
输出该数是否为完全数
num = eval(input())
he = 0
for i in range(1, num // 2 + 1):
    if num % i == 0:
        he += i
if he == num:
    print("Yes")
else:
    print("No")

Demo39:50个素数

打印前50个素数,每打印10个素数换行

num = 2 
count = 0 
while count != 50:
    flag = True 
    for n in range(2, num // 2 + 1):
        if num % n == 0:
            flag = False
            break
    if flag:
        print(num, end = "\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

Demo40:计算π

i = eval(input())
pi = 0
for j in range(1, i + 1):
    pi += (-1) ** (j + 1) / (2 * j - 1)
print(pi * 4)

Demo41:计算e

i = eval(input())
he = 1
n = 1
for j in range(1, i + 1):
    for k in range(2, j + 1):
        n = 1 / k * n 
    he += n
    n = 1
print(he)

Demo42:剪刀石头布 II

利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜 利者
import random
A = 0 #用户的分数
B = 0 #计算机的分数
while True:
    print("请输入0、1或2")
    a = int(input())
    b = random.randint(0,2)
    if (a < b) or (a == 2 and b == 0) :
        B += 1
    elif a == b :
        A = A
        B = B
    else :
        A += 1
    if A == 3:
        print("用户获胜!")
        break
    elif B == 3:
        print("计算机获胜!")
        break

Demo43:组合问题 I

在数字范围 [1,7] 之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
a = 0  # 计数器,用于统计组合个数
# 循环生成所有可能的组合
for i in range(1, 8):
    for j in range(i + 1, 8):
        # 输出组合
        print(i," ",j)
        a += 1

print("所有组合的个数:" , a)

Demo44:组合问题 II

1 2 3 4 这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

 

a = 0  # 计数器,用于统计满足条件的三位数个数

# 循环生成所有可能的组合
for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            # 确保三个数字各不相同
            if i != j and j != k and i != k:
                # 计算并输出三位数
                num = i * 100 + j * 10 + k
                print(num)
                a += 1

print("满足条件的三位数总共有" , a , "个")

Demo45:水仙花数

for num in range(100, 1000):
    #取个位数
    a = num % 10
    #取十位数
    b = num // 10 % 10
    #取百位数
    c = num // 100
    if a ** 3 + b ** 3 + c ** 3 == num:
        print(num)

Demo46:青蛙跳台阶

一只青蛙,一次可以跳一个台阶或者两个台阶,现有 n 个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法( 1+1 2 );四个台阶,有五种跳法( 1+1+1+1 2+1+1 1+2+1
1+1+2 2+2
n = eval(input())
if n == 1 or n == 2:
    print(n)
else :
    a = 1 
    b = 2 
    c = 0 
    for i in range(3, n + 1):
        c = a + b 
        a = b 
        b = c 
    print(c)

Demo47:堆叠相加

a, n = eval(input())
sum = 0
num = 0 
for i in range(n):
    num = num * 10 + a 
    sum += num
print(sum)

Demo48:十进制转二进制

n = eval(input())
x = ""
while n != 0:
    m = n % 2 
    x = str(m) + x
    n //= 2
print(int(x))x

Demo49:二进制转十进制

n = input()
length = len(n) - 1
sum = 0
for i in n:
    j = int(i)
    sum += j * 2 ** length
    length -= 1
print(sum)

Demo50:十进制转十六进制

"""
9 ÷ 2 = 4 ~ 1
4 ÷ 2 = 2 ~ 0
2 ÷ 2 = 1 ~ 0
1 ÷ 2 = 0 ~ 1
1001 = 9

123321 ÷ 16 = 7707 ~ 9
7707 ÷ 16 = 481 ~ 11
481 ÷ 16 = 30 ~ 1
30 ÷ 16 = 1 ~ 14 E
1 ÷ 16 = 0 ~ 1
1E189
"""
num = eval(input())
s = ""
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:十六进制转十进制

print("请输入一个十六进制数,字母a-f小写")
a = input()
b = 0
for i in a :
    if '0' < i <'9':
        b = b * 16 + (ord(i) - ord('0'))
    elif 'a' <= i <= 'f' :
        b = b * 16 + (ord(i) - ord('A') + 10)
    else :
        print("输入的不是十六进制数")
print(b)

Demo52:最长公共前缀

给定两个字符串 s1 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
s1 = input()
s2 = input()
s = ""
min_len = min(len(s1), len(s2))
for i in range(min_len):
    if s1[i] == s2[i]:
        s += s1[i]
    else:
        break
print(s)

Demo53:子串出现的次数

给定两个字符串 s1 s2 ,求 s2 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
s1 = input()
s2 = input()
count = 0
length = len(s1)
len1 = 0
while len1 < length:
    if s1[len1] == s2[0]:
        #从当前下标往后取2个包括当前下标数
        if s1[len1t:len1 + 3] == s2:
             count += 1
             len1 += 2
    len1 += 1
print(count)

Demo54:最长公共子串

给定两个字符串 s1 s2 ,求 s1 s2 之间的最长公共子串,字符区分大小写

Demo55:检测密码

一些网站会给密码强加一些规则:
1 )密码必须至少有 8 个字符
2 )密码只能包含英文字母和数字
3 )密码应该至少包含两个数字
4 )密码应该至少包含两个大写字母
如果密码符合规则,输出 Yes ;否则输出 No
# 输入密码
password = input("请输入密码:")

# Rule 1: 密码至少有8个字符
if len(password) < 8:
    print("No")
else:
    # Rule 2: 密码只能包含英文字母和数字
    if not password.isalnum():
        print("No")
    else:
        # Rule 3: 密码至少包含两个数字
        digit_count = sum(1 for char in password if char.isdigit())
        if digit_count < 2:
            print("No")
        else:
            # Rule 4: 密码至少包含两个大写字母
            uppercase_count = sum(1 for char in password if char.isupper())
            if uppercase_count < 2:
                print("No")
            else:
                print("Yes")

Demo56:回文素数

回文素数是指一个数既是素数又是回文数,例如 131 既是素数也是回文数
输出显示前 100 个回文素数,每行显示 10
num = 2
count = 0
while count < 100:
    # 将数字转换为字符串以检查是否为回文数  
    s = str(num)
    if s == s[::-1]:
        flag = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                flag = False
                break
        # 如果既是回文数又是素数,则输出并增加计数器 
        if flag:
            count += 1
            print(num, end = " ")   
            # 每10个数字后换行 
            if count % 10 == 0:
                print()
    num += 1

Demo57:反素数

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如 17 71 都是素数但不是回文数,且反转 后依旧是素数
输出显示前 100 个反素数,每行显示 10
num1 = 2
count = 0 
while count < 100:
    flag1 = True
    for n in range(2, int(num1 ** 0.5) + 1):
        if num1 % n == 0:
            flag1 = False
            break
    #将数字转化为翻转数
    s = str(num1)
    num2 = int(s[::-1])
    flag2 = True
    for n in range(2, int(num2 ** 0.5) + 1):
        if num2 % n == 0:
            flag2 = False
            break
    flag3 = True
    #判断两个数是否是回文
    if num1 == num2:
        flag3 = False
    if flag1 and flag2 and flag3:
        print(num1, end =" ")
        count += 1
        #每输出十个数换行
        if count % 10 == 0:
            print()
    num1 += 1

Demo58:双素数

双素数是指一对差值为 2 的素数,例如 3 5 就是一对双素数, 5 7 也是一对双素数
输出显示小于 1000 的双素数
num1 = 3
while num1 < 1000:
    for i in range(2, int(num1 ** 0.5) + 1):
        if num1 % i == 0:
            break
    else:
        num2 = num1 + 2
        for j in range(2, int(num2 ** 0.5) + 1):
            if num2 % j == 0:
                break
        else:
            print(num1,num2)
    num1 += 1        

Demo59:梅森素数

p = 2
while p <= 31:
    num = 2 ** p - 1
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            break
    else:
        print(num)
    p += 1

Demo60:平方根的近似求法

n = eval(input())
nextGuess = 0
lastGuess = 1
x = 0
while True:
    nextGuess = (lastGuess + n / lastGuess) / 2
    if abs(nextGuess - lastGuess) < 0.0001:
        x = nextGuess
        break
    else:
        lastGuess = nextGuess
print(x)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值