编程题作业集第二部分

打印数字

题目描述

利用循环,寻找规律,打印如下数字模式:

模式A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
 

代码如下

# 正直角三角形

for i in range(1, 6):

    for j in range(1, i+1):

        print(j, end='')

    print()

# 倒直角三角形

for i in range(5, 0, -1):

    for j in range(i, 0, -1):

        print(j, end='')

    print()

打印数字II

金字塔

题目描述

利用循环,寻找规律,打印如下数字模式:

```
            1
          2 1 2
        3 2 1 2 3
      4 3 2 1 2 3 4
    5 4 3 2 1 2 3 4 5
  6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
```

代码如下

n = 7

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

    for j in range(1, n-i+1):

        print(" ", end="")

    for k in range(1, i+1):

        print(k, end="")

    for l in range(i-1, 0, -1):

        print(l, end="")

    print()

打印数字III

题目描述

利用循环,寻找规律,打印如下数字模式:

                        1
                    1   2   1
                1   2   4   2   1
            1   2   4   8   4   2   1
        1   2   4   8   16  8   4   2   1
    1   2   4   8   16  32  16  8   4   2   1
1   2   4   8   16  32  64  32  16  8   4   2   1

代码如下

layer = int(input("请输入你要打印的行数:"))

for i in range(0,layer):

    for k in range(layer - i , 0 , -1):

        print(" ",end = "\t")

    for j in range(1,i + 1):

        print(2 ** (j - 1),end = "\t")

    for k in range(i + 1,0 ,-1):

        print(2 ** (k - 1),end = "\t")

    print()

打印菱形(写过略)

猜数字游戏

题目描述

计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同

对于用户输入的数字,程序会提示它是过高还是过低

输入输出描述

每次输入一个整数

每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束

import random

number = random.randint(1, 100)

while True:

   

    guess = int(input("请输入一个1-100之间的整数:"))

    if guess > number:

        print("高了!")

    elif guess < number:

        print("低了!")

    else:

        print("正确!")

        break  

最大公约数I

题目描述

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

输入输出描述

输入两个数字

输出最大公约数

示例1

输入:

16 24

输出:

8

示例2

输入:

7 3

输出:

1

代码如下

a = int(input("请输入第一个数:"))

b = int(input("请输入第二个数:"))

while b != 0:

    a, b = b, a % b

print("最大公约数为:", a)

判断素数

题目描述

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

输入输出描述

输入一个大于1的正整数

输出Yes表示该数字是素数,否则输出No

示例1

输入:

9

输出:

No

示例2

输入:

11

输出:

Yes

代码如下

def is_prime(x):

    if x==1:

        return False;

    for i in range(2,x):

        if x%i==0:

            return False

    return True

n=int(input())

if is_prime(n):

    print("Yes")

else:

    print("No")

最小公倍数和最大公约数

题目描述

输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

代码如下

def gcd(x, y):

    if x > y:

        smaller = y

    else:

        smaller = x

    for i in range(1, smaller+1):

        if((x % i == 0) and (y % i == 0)):

            gcd = i

    return gcd


 

def lcm(x, y):

    lcm = (x*y)//gcd(x,y)

    return lcm


 

num1 =36

num2 =8

print("最小公倍数为:", lcm(num1, num2))

整数的素因子

题目描述

输入一个正整数,然后找出它所有的最小因子,也称之为素因子

输入输出描述

输入一个正整数

输出多行,每行输出一个素因子

示例1

输入:

120

输出:

2 2 2 3 5

解释:

2 * 2 * 2 *3 * 5 = 120

示例2

输入:

100

输出:

2 2 5 5

代码如下

aa = input("输入一个整数")

aa = int(aa)

b = 2     # 起始质数为最小质数

xx = []

while True:

    if aa % b != 0:

        b += 1

    else:

        aa = aa // b

        xx.append(b)

    if aa == 1:

        break

print(xx)

完全数

题目描述

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

代码如下

n = int(input("请输入一个正整数:"))

s = 0

for i in range(1, n):

    if n % i == 0:

        s += i

if s == n:

    print("{}是完全数".format(n))

else:

    print("{}不是完全数".format(n))

前50个素数(写过)

计算π

题目描述

你可以使用下面的数列近似计算π
π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1})

当i越大时,计算结果越近似于π

代码如下

import random

n = 1000000  

count = 0    

for i in range(n):

  x, y = random.uniform(0, 1), random.uniform(0, 1)

  if x**2 + y**2 <= 1:

    count += 1

pi = 4.0 * count / n

print("π的近似值为:", pi)

计算e

题目描述

你可以使用下面的数列近似计算e


e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
 

当i越大时,计算结果越近似于e

代码如下

n=eval(input())

e=1

divisor=1

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

    divisor *= i

    e=e+1/divisor

print("{:.8f}".format(e))

剪刀石头布II(写过)

组合问题

题目描述**

在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数

注:组合(a,b)与组合(b,a)算同一种组合,只记录一次

代码如下

list = [1,2,3,4,5,6,7]

add = 0

for x in list:  

    for y in list:  

     

            if (x != y) and (y != x) :

                add += 1

                print(x,y,end= "|")

print("一共有",add,"个")

组合问题II

题目描述

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

代码如下

list = [1,2,3,4,5,6,7]

add = 0

for x in list:  

    for y in list:

         for z in list:

            if (x != y) and (y != z)and (z!=x):

                add += 1

                print(x,y,z,end= "|")

print("一共有",add,"个")

水仙花数(写过)

青蛙跳台阶

题目描述

一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?

例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)

代码如下

def jumpfloor(n):

    if n==1:

        return 1

    elif n==2:

        return 2

    else:

        return jumpfloor(n-1)+jumpfloor(n-2)

十进制转二进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出二进制字符串

示例

输入:

9

输出:

1001

代码如下

#python屏幕输入为字符串,将其转化为整数再操作
number = int(input())
binnum = bin(number)
print(binnum)
 

 二进制转十进制

题目描述

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

输入输出描述

输入一个二进制字符串

输出十进制数字

事例

> 输入:
>
> 1001
>
> 输出:
>
> 9

代码如下

a = '10111'

b = int(a,2)

print(b)

十进制转十六进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出十六进制字符串

示例

输入:

1233321

输出:

1e1b9

十六进制转换为十进制

hex_num = input("请输入一个16进制数:")

dec_num = int(hex_num, 16)

print("转换后的10进制数为:", dec_num)

最长公共前缀

题目描述

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

输入输出描述

输入两行,分别表示s1和s2

输出前缀串

示例

输入:

abcdefg

abcdhko

输出:

abcd

代码如下

def longest_common_prefix(s1, s2):

    i = 0

    while i < len(s1) and i < len(s2) and s1[i] == s2[i]:

        i += 1

    return s1[:i]

# 接收输入

s1 = input()

s2 = input()

# 调用函数计算最长公共前缀

result = longest_common_prefix(s1, s2)

# 输出结果

print(result)

子串出现的次数

题目描述

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

输入输出描述

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

输出s2在s1中出现的次数

示例1

输入:

ABCsdABsadABCasdhjabcsaABCasd

ABC

输出:

3

示例2

输入:

AAAAAAAA

AAA

输出:

2

代码如下

def count_substring(s1, s2):

    count = 0

    i = 0

    while i < len(s1):

        if s1[i:i+len(s2)] == s2:

            count += 1

            i += len(s2)

        else:

            i += 1

    return count

s1 = input()

s2 = input()

result = count_substring(s1, s2)

print(result)

检测密码

**题目描述**

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

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

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

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

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

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

代码如下

def check_password(password):

    if len(password) < 8:

        return "No"

   

    num_count = 0

    uppercase_count = 0

    for char in password:

        if char.isnumeric():

            num_count += 1

        elif char.isupper():

            uppercase_count += 1

   

    if num_count >= 2 and uppercase_count >= 2:

        return "Yes"

    else:

        return "No"


 

password = input()

result = check_password(password)

print(result)

回文素数

题目描述

回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数

输出显示前100个回文素数,每行显示10个

代码如下

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

def is_palindrome(num):
    return str(num) == str(num)[::-1]

count = 0
num = 2

while count < 100:
    if is_prime(num) and is_palindrome(num):
        print(num, end=' ')
        count += 1
        if count % 10 == 0:
            print()
    num += 1

反素数

**题目描述**

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

代码如下

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

def reverse_num(num):
    return int(str(num)[::-1])

count = 0
num = 2

while count < 100:
    if is_prime(num) and is_prime(reverse_num(num)):
        print(num, end=' ')
        count += 1
        if count % 10 == 0:
            print()
    num += 1

 双素数

**题目描述**

双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数

输出显示小于1000的双素数

代码如下

def is_prime(num):

    if num < 2:

        return False

    for i in range(2, int(num**0.5) + 1):

        if num % i == 0:

            return False

    return True

for num in range(3, 1000):

    if is_prime(num) and is_prime(num+2):

        print(num, num+2)

梅森素数

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

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

代码如下

def is_prime(num):

    if num < 2:

        return False

    for i in range(2, int(num**0.5) + 1):

        if num % i == 0:

            return False

    return True

for p in range(2, 32):

    number = 2**p - 1

    if is_prime(number):

        print("p =", p, "梅森素数:", number)

平方根的近似求法

有几种实现开平方$\sqrt{n}$的技术,其中一个称为巴比伦法

它通过使用下面公式的反复计算近似地得到:
nextGuess=(lastGuess+n/lasetGuess)/2

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

lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行

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

代码如下

def square_root(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("请输入一个数字:"))

approximation = square_root(n)

print("平方根的近似值为:", approximation)

你可能感兴趣的:(python,开发语言)