python编程练习2

文章内容涉及编程任务,包括打印不同形状的几何图形(如菱形),判断素数、最大公约数、最小公倍数、完全数、水仙花数以及解决数学游戏(青蛙跳法、回文素数等),展示了基本的算术和算法应用。
摘要由CSDN通过智能技术生成

31,

  *
 * *
*   *
 * *
  *

用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n n 为奇数
输出该高度的菱形
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() 

32,

    *
  * * *
* * * * *
  * * *
    *

用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n n 为奇数
输出该高度的菱形
x = eval(input())
a = x // 2 
b = x // 2 + 1
for n in range(-a, b):
    for k in range(abs(n)):
        
        print(" "  , end = " ")
    for i in range(1):
        num = x - 2 * abs(n)
        print("* "*num, end = " ")
    print()

33.

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

34.

输入两个正整数,计算其最大公约数,例如 4 2 的最大公约数是 2 16 24 的最大公约数是 8
输入输出描述
输入两个数字
输出最大公约数
a, b = eval(input())
minNum = min(a, b)
maxNum = max(a, b)
for i in range(minNum, 0, -1):
    if minNum % i == 0 and maxNum % i == 0 :
        print(i)
        break

35.

题目描述
一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 3 5 7 都是素数,而 4
6 8 9 则不是
输入输出描述
输入一个大于 1 的正整数
输出 Yes 表示该数字是素数,否则输出 No
n = eval(input())
flag = True
for i in range(2, n // 2):
    if n % i == 0:
        flag = False
        print("No")
        break
if flag:
    print("Yes")

36.

输入两个正整数,计算其最小公倍数,例如 4 2 的最小公倍数是 4 3 5 的最小公倍数是 15
输入输出描述
输入两个正整数
输出最小公倍数
a, b = eval(input())
minNum = min(a, b)
maxNum = max(a, b)
#找最大公约数
for i in range(minNum, 0, -1):
    if minNum % i == 0 and maxNum % i == 0 :
        if i == minNum:
            print(maxNum)
            break
        elif 1 < i < minNum:
            n = (maxNum // i) * minNum
            print(n)
            break
        else:
            print(a * b)

        

37.

输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
n = eval(input())
i = 2
while n != 1:
    if n % i == 0:
        print(i ,end = " ")
        n = n // i
    else:
        i += 1
    

38.

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

39.打印前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

40.

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

41.

n = eval(input())
num = 1
sum = 0
for i in range(1, n + 1):
    num = num * i
    sum = sum + 1 / num
Nsum = 1 + sum
print(Nsum)

42.

import random  
computer_choice = random.randint(0, 2)  
    

user = 0
com = 0
flag = True
while flag:
    user_choice = int(input())
    if user_choice == computer_choice:  
        pass
    elif (user_choice == 0 and computer_choice == 2) or   (user_choice == 1 and computer_choice == 0) or (user_choice == 2 and computer_choice == 1):  
        user = user + 1
    else:  
        com = com + 1
    if user == 3:
        flag = False
        print("用户赢")
    elif com == 3:
        flag = False
        print("计算机赢")

43.

在数字范围 [1,7] 之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
count = 0
for i in range(1, 8):
    for j in range(i+1, 8):
        count += 1
        print( i, j, sep = ","  )
print(count)

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

nums = [1, 2, 3, 4]
count = 0
for i in nums:
    for j in nums:
        if i == j:
            continue
        for k in nums:
            if i == k or j == k:
                continue
            print(i * 100 + j * 10 + k)
            count += 1
print(count)

45.编写程序,输出所有的水仙花数

for i in range(100, 1000):
    bai = i // 100
    shi = i // 10 % 10
    ge = i % 10
    if bai ** 3 + shi ** 3 + ge ** 3 == i:
        print(i)

46.

一只青蛙,一次可以跳一个台阶或者两个台阶,现有 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 = a + b
    for n in range(n - 3):
        a = b
        b = c
        c = a + b
print(c)

47.

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

48.输入一个十进制正整数,输出其二进制形式

number = eval(input())   
result = ""  
 
while number > 0:  
    binary_digit = number % 2  
    result = str(binary_digit) + result  
    number = number // 2  
  
print(result)

49.输入一个二进制字符串,输出其对应的十进制数字

n = eval(input())
#n = int(num)
i = 0 
sum = 0
while n != 0:
    i += 1
    s = n % 10
    n = n // 10
    sum = sum + s * 2 ** (i - 1)

print(sum)

50.输入一个十进制正整数,输出其十六进制形式

num = eval(input())

s = ""
while num != 0:
    y = num % 16
    if y >= 10:
        y = chr(ord('A') + y - 9)
    s = str(y) + s
    num = num // 16
print(s)
    

51.输入一个十六进制字符串,输出其对应的十进制数字

52.给定两个字符串 s1 s2 ,求两个字符串最长的公共前缀串,字符区分大小写

def longest_common_substring(s1, s2):  
    m = len(s1)  
    n = len(s2)  
        
    dp = [[0] * (n + 1) for _ in range(m + 1)]  
    max_len = 0    
    end = 0 
      
    for i in range(1, m + 1):  
        for j in range(1, n + 1):  
            if s1[i - 1] == s2[j - 1]:  
                dp[i][j] = dp[i - 1][j - 1] + 1  
                if dp[i][j] > max_len:  
                    max_len = dp[i][j]  
                    end = i   
    lcs = s1[end - max_len: end]  
    return lcs  
   
s1 = input().strip()  
s2 = input().strip()  
lcs = longest_common_substring(s1, s2)  
print(lcs)

53.

def count_occurrences(s1, s2):  
    count = 0  
    index = 0  
    while True:  
        index = s1.find(s2, index)  
        if index == -1:  
            break  
        count += 1  
        index += len(s2)  
    return count  
  
s1 = input().strip()  
s2 = input().strip()  
occurrences = count_occurrences(s1, s2)  
print(occurrences)

54.

def longest_common_substring(s1, s2):  
    m = len(s1)  
    n = len(s2)  
      
    dp = [[0] * (n + 1) for _ in range(m + 1)]  
    max_len = 0  
    end = 0   

    for i in range(1, m + 1):  
        for j in range(1, n + 1):  
            if s1[i - 1] == s2[j - 1]:  
                dp[i][j] = dp[i - 1][j - 1] + 1  
                if dp[i][j] > max_len:  
                    max_len = dp[i][j]  
                    end = i  
      

    lcs = s1[end - max_len: end]  
    return lcs  
  

s1 = input().strip()  
s2 = input().strip()  

lcs = longest_common_substring(s1, s2)  
print(lcs)

55.

password = input()  
if len(password) < 8:  
    print("No")  
else:   
    if not password.isalnum():  
        print("No")  
    else:   
        if sum(1 for c in password if c.isdigit()) < 2:  
            print("No")  
        else:  
            if sum(1 for c in password if c.isupper()) < 2:  
                print("No")  
            else:  
                print("Yes")

56.

回文素数是指一个数既是素数又是回文数,例如 131 既是素数也是回文数
输出显示前 100 个回文素数,每行显示 10
num = 2
count = 0
while count < 100:
    flag1 = True

    for n in range(2, num // 2 + 1):
        if num % n == 0:
            flag = False
            break
    
    if flag1:
        str_num = str(num)
        restr_num = str_num[::-1]      
        if str_num == restr_num and num > 100:  
            print(num, end = "\t")
            count += 1
            if count % 10 == 0:
                print()
    num += 1

57.

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如 17 71 都是素数但不是回文数,且反转
后依旧是素数
输出显示前 100 个反素数,每行显示 10
num = 2
count = 0
while count < 100:
    flag1 = True
    flag2 = True
    for n in range(2, num // 2 + 1):
        if num % n == 0:
            flag1 = False
            break
    
    str_num = str(num)
    restr_num = str_num[::-1]
    re_num = int(restr_num)
    for i in range(2, re_num // 2 + 1):
        if re_num % i == 0:
            flag2 = False
            break      
    if flag1 and flag2 and num > 10: 
        print(num, end = "\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

58.

双素数是指一对差值为 2 的素数,例如 3 5 就是一对双素数, 5 7 也是一对双素数
输出显示小于 1000 的双素数
num1 = 2
count = 0
while count < 1000:
    flag1 = True
    flag2 = True
    for n in range(2, num1 // 2 + 1):
        if num1 % n == 0:
            flag1 = False
            break
    
    for i in range(2, num1 // 2 + 1):
        num2 = num1 + 2
        if num2 % i == 0:
            flag2 = False
            break      
    if flag1 and flag2: 
        print(num1, end = "\t")
        count += 1
        if count % 10 == 0:
            print()
    num1 += 1

59.

num1 = 2
count = 0
p = 1
while p <= 31:
    flag1 = True
    for n in range(2, num1 // 2 + 1):
        if num1 % n == 0:
            flag1 = False
            break
   
    if flag1: 
        p = 1
        num2 = 2 ** p - 1
        while 2 ** p - 1 < num1:
            p += 1
            num2 = 2 ** p - 1
            if num2 == num1:
                print(num1, end = "\t")
    num1 += 1

60.

n = eval(input())  
last = 1.0   
epsilon = 0.0001  
  
while True:  
    new_last = (last + n / last) / 2  
    if abs(new_last - last) < epsilon:   
        print(new_last)  
        break  
    last = new_last

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值