python练习

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:

    usrNum = eval(input())

    if usrNum < randNum:

        print("小了")

    elif usrNum > randNum:

        print("大了")

    else:

        print("猜对了")

        break

34.

输入两个正整数,计算其最大公约数,例如 4 和 2 的最大公约数是 2 , 16 和 24 的最大公约数是 8

输入输出描述

输入两个数字

输出最大公约数

num1, num2 = eval(input())

min_num = min(num1, num2)

for num in range(min_num, 0, -1):

    if num1 % num == 0 and num2 % num == 0:

        print(num)

        break

35.

题目描述

一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 、 3 、 5 和 7 都是素数,而 4 、

6 、 8 、 9 则不是

输入输出描述

输入一个大于 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")

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.有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

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())

a = 1

b = 2

sum = 0

if n <= 2:

    print(n)

else:

    for i in range(3, n+1):

        sum = a + b

        a = b

        b = sum

print(sum)

47.

现有堆叠相加模式a+aa+aaa+aaaa+aaaaa+… …

例如:2+22+222+2222+22222 ,其中a为2,且有5组数字

输入输出描述

输入两个数据分别为数字a和组数n

输出按照堆叠相加模式算出的和

a, n = eval(input())

sum = 0

num = 0

for i in range(n):

    num = num * 10 + a

    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.输入一个十六进制字符串,输出其对应的十进制数字

def int_16(str_16):

    print(int(str_16.upper(), 16))

   

while 1:

    try:

        s = input()

        int_16(s)

    except:

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.

题目描述

给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配

输入输出描述

输入两行字符串,分别为s1和s2,s2的长度小于等于s1

输出s2在s1中出现的次数

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.

题目描述

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

输入输出描述

输入两行字符串,分别为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)

55.

题目描述

一些网站会给密码强加一些规则:

(1)密码必须至少有8个字符

(2)密码只能包含英文字母和数字

(3)密码应该至少包含两个数字

(4)密码应该至少包含两个大写字母

如果密码符合规则,输出Yes;否则输出No

输入输出描述

输入一串密码

输出该密码是否符合规则

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.

如果一个素数可以写成 的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

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.

有几种实现开平方 的技术,其中一个称为巴比伦法

它通过使用下面公式的反复计算近似地得到:

nextGuess = (lastGuess + n / lastGuess) / 2

当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值

lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为

nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行

编写代码,求解n的平方根的近似值

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值