开发通用编程基础合集--python(第二部分 循环语句)

Demo28 打印数字II

题目描述

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

# 利用循环,寻找规律,打印如下数字模式:
      #         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
 
 
# 用户输入需要的层数
row = int(input("输入"))
 
 
def print_row (row):
  
  for i in range(1,row+1):
    print(" "*(row*2-2*i),end="")
    num = 1
    for j in range(1,i*2):
 
      if j<i:
        print(str(num)+" ",end="")
        num*=2
      else:
        print(str(num)+" ",end="")
        num = int(num/2)
    print()
 
    
print_row(row)
 
 

Demo29 打印数字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

Demo30 打印菱形I

题目描述

如下所示,是一个高度为9的菱形

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

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
* * *
 * *
  *
# 输出一个高度为9的菱形
 
#     *
#    * *
#   * * *
#  * * * *
# * * * * *
#  * * * *
#   * * *
#    * *
#     *
 
 
# 用户输入想要打印的层数
row = int (input("输入"))
 
 
def print_pic(row):
  for i in range(1,row+1):
    if i<row//2+1:
      print(" "*((row+1)//2-i),end="")
      print("* "*i)
    else:
      print(" "*(i-(row+1)//2),end="")
      print("* "*(row+1-i))
      
  
print_pic(row)

Demo31 打印菱形II

题目描述

如下所示,是一个高度为9的菱形

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

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
*   *
 * *
  *
# 打印空心菱形
#     *    
#    * *   
#   *   *  
#  *     * 
# *       *
#  *     * 
#   *   *  
#    * *   
#     *    
 
# 用户输入打印的行数
row = int(input("输入"))
 
 
def print_pic(row):
  for i in range(0,row):
    if i<row//2+1:
      print(" "*(row//2-i),end="")
      for j in range(i*2+1):
        if j ==0 or j==i*2:
          print("*",end="")
        else:
          print(" ",end="")
    else:
      print(" "*(i-row//2),end="")
      for j in range((row-i)*2-1):
        if j==0 or j == (row-i-1)*2:
          print("*",end="")
        else:
          print(" ",end="")
    print()
 
 
 
print_pic(row)

Demo33 猜数字

题目描述

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

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

输入输出描述

每次输入一个整数

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

示例

输入:50

输出:高了

输入:25

输出:低了

输入:42

输出:高了

输入:39

输出:猜中了!答案就是39

import random

com = random.randint(0, 100)  # [0,100] range(0,100) # [0,100)

while True:
    # 1
    num = int(input("请输入一个数:"))
    # 2.1
    if num == com:
        print("猜对了!答案就是", com)
        break
        # 2.2
    elif num > com:
        print("高了")
        # 2.3
    else:
        print("低了")

Demo34 最大公约数I

题目描述

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

num_1 = int(input("请输入第一个正整数:"))
num_2 = int(input("请输入第二个正整数:"))
#取小的那个值以下的值进行判断
if num_1 >= num_2 :
    for i in range(1 , num_2 + 1) :
        #若该数可以同时被这两个数整除,则为公约数
        if num_1 % i == 0 and num_2 % i == 0 :
            #i逐渐增加,直到达到最大的公约数
            num = i
    print(f"最大公约数为:{num}")
if num_1 <= num_2 :
    for i in range(1 , num_1 + 1) :
        if num_1 % i == 0 and num_2 % i == 0 :
            num = i
    print(f"最大公约数为:{num}")

输入输出描述

输入两个数字

输出最大公约数

示例1

输入:

16 24

输出:

8

示例2

输入:

7 3

输出:

1

Demo36 最小公倍数

题目描述

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

num_1 = int(input("请输入第一个正整数:"))
num_2 = int(input("请输入第二个正整数:"))
#取大的那个值后面的数进行判断
if num_1 >= num_2 :
    #最多到两数相乘
    for i in range(num_1 , num_2 * num_1 + 1) :
        if i % num_1 == 0 and i % num_2 == 0 :
            #从小的开始判断,满足条件则中断循环,就能拿到最小的那个公倍数
            num = i
            break
    print(f"最小公倍数为:{num}")
elif num_1 <= num_2 :
    for i in range(num_2 , num_1 * num_2 + 1) :
        if i % num_1 == 0 and i % num_2 == 0 :
            num = i
            break
    print(f"最小公倍数为:{num}")

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

Demo37 整数的素因子

题目描述

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

# 输入一个正整数,然后找出它所有的最小因子,也称之为素因子
 
 
num = int(input("输入"))
 
 
def prime(num):
  """
  求素因子
  """
  arr=[]
  i = 2
  while i * i <= num :
    if num % i == 0:
      arr.append(i)
    else:
      i += 1
  if num > 1 :
    arr.append(num)
  return arr
 
 
print(prime(num))

输入输出描述

输入一个正整数

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

示例1

输入:

120

输出:

2 2 2 3 5

解释:

2 * 2 * 2 *3 * 5 = 120

示例2

输入:

100

输出:

2 2 5 5

Demo38 完全数

题目描述

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

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

num = int(input("请输入一个正整数:"))
array = []
#存储输入的值
num_t = num
#定义一个数用来储存因子和
sum = 0
#定义循环变量并循环分解出因子
i = 2
while i <= num :
    if num % i == 0 :
        array.append(i)
        num //= i 
    else :
        i += 1
for i in array :
    sum += i
#多加一个1,因为1能被除
if sum + 1 == num_t :
    print("yes")
else :
    print("no")

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

Demo40 计算π

题目描述

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

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

# 计算π
 
i = int (input("输入"))
 
 
def get_π(i):
  num = 0
  for i in range(1,i+1):
   num +=  (-1)**(i+1)/(2*i-1)
  num *= 4
  return num
 
 
print(get_π(i))

Demo41 计算e

题目描述

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

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

i= int(input("请输入计算次数:"))
temp = 1
e = 1
for j in range(1 , i + 1) :
    for k in range(1 , j + 1) :
        temp = temp * k
    e = e + 1 / temp
print(e)

Demo43 组合问题I

题目描述

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

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

#定义一个数计算总个数
sum = 0
#两个循环,第一个输出前一个数,第二个输出后一个数,输出一次sum+1
for i in range(1 , 8) :
    for j in range(i , 8) :
        print(i , j)
        sum  += 1
print(sum)

Demo44 组合问题II

题目描述

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

# 组合问题II
 
arr =[1,2,3,4]
 
count = 0
for i in range(1,len(arr)-1):
  for j in range(2,len(arr)):
    for p in range(3,len(arr)+1):
      if i!=j and j != p:
        print(f"[{i} {j} {p}]",end="")
        count += 1
print("\n"+str(count))
 

Demo46 青蛙跳台阶

题目描述

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

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

递归

def frog(n) :
    #一阶只有一种跳法
    if n == 1 :
        return 1
    #两阶只有两种跳法
    elif n == 2 :
        return 2
    #多阶,从最后一阶往回计算,跳一阶的数和跳两阶的数之和就是总的方法数
    else :
        return frog(n - 1) + frog(n - 2) 
print(f"一共有{frog(4)}种跳法")

Demo47堆叠相加

题目描述

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

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


 
 
num , group = map(int ,input("输入").split())
 
 
def get_num(num,group):
  sum = 0
  for i in range(1,group+1): 
    sum += int(str(num)*i)
  return sum
  
 
print(get_num(num,group))

输入输出描述

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

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

示例

输入:

3 4

输出:

3702

解释:

3 + 33 + 333 + 3333 = 3702

Demo48 十进制转二进制

题目描述

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

#循环判断输入的数是否符合条件
while True :
    num = int(input("请输入一个正整数:"))
    if num % 1 == 0 :
        break
temp = []
#拆分为倒序的二进制
while num > 0 :
    temp.append(num % 2)
    num //= 2 
#反转列表为正确的顺序
temp.reverse()
#输出
for i in temp :
    print(i , end=" ")

输入输出描述

输入一个十进制正整数

输出二进制字符串

示例

输入:

9

输出:

1001

Demo49 二进制转十进制

题目描述

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

array = list(input('请输入一个二进制数:'))
#定义一个数容纳列表的长度
temp = len(array)
#初始化十进制的数
num_S = 0
#循环使用位阶计算该十进制数(累加)
for i in array :
    num_S += int(i) * (2 ** (temp - 1))
    temp -=1
print(num_S)

输入输出描述

输入一个二进制字符串

输出十进制数字

示例

输入:

1001

输出:

9

Demo50 十进制转十六进制

题目描述

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

temp = list(input("请输入一个16进制的数:"))
#初始化十进制数
sum = 0
#计算列表中的元素个数
num = len(temp)
#循环计算,将字符串转换为整型计算
for i in temp :
    if i == "a" :
        sum += 10 * (16 ** (num - 1)) 
    elif i == "b" :
        sum += 11 * (16 ** (num - 1)) 
    elif i == "c" :
        sum += 12 * (16 ** (num - 1)) 
    elif i == "d" :
        sum += 13 * (16 ** (num - 1)) 
    elif i == "e" :
        sum += 14 * (16 ** (num - 1)) 
    elif i == "f" :
        sum += 15 * (16 ** (num - 1)) 
    #本来就是整形的直接计算
    else :
        sum += int(i) * (16 ** (num - 1)) 
    #位阶的幂
    num -= 1
print(sum)

输入输出描述

输入一个十进制正整数

输出十六进制字符串

示例

输入:

1233321

输出:

1e1b9

Demo52 最长公共前缀

题目描述

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

array_1 = list(input("请输入第一个字符串:"))
array_2 = list(input("请输入第二个字符串:"))
temp = []
i = 0
#如果两个列表同一位置的元素相同,则输入到第三个数组
while i < len(array_1)  :
    if array_1[i] == array_2[i] :
        temp.append(array_1[i])
        i += 1
    #一旦碰到不相同的,结束循环
    else :
        break
#输出
for i in temp :
    print(i , end="")

输入输出描述

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

输出前缀串

示例

输入:

abcdefg

abcdhko

输出:

abcd

Demo53 子串出现的次数

题目描述

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

while True :
    s1 = (input("请输入第一个字符串:"))
    s2 = (input("请输入第二个字符串:"))
    if len(s1) > len(s2) :
        break
count = s1.count(s2)
print(count)

输入输出描述

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

输出s2在s1中出现的次数

示例1

输入:

ABCsdABsadABCasdhjabcsaABCasd

ABC

输出:

3

示例2

输入:

AAAAAAAA

AAA

输出:

2

Demo54 最长公共子串

题目描述

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

str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
 
def find_lcs(str1,str2):
    lcs=set()
    if len(str1)>len(str2):
        str1,str2=str2,str1
 
    for i in range(len(str1),0,-1):
        flag=False
        for j in range(len(str1)-i+1):
            s=str1[j:i+j]
            if str2.find(s)>-1:
                lcs.add(s)
                flag=True
            else:
                flag=False    
        if flag:
            break             
    print("最长公共子串为:",lcs)   
 
find_lcs(str1,str2)

输入输出描述

输入两行字符串,分别为s1和s2

输出最长公共子串

示例

输入:

123ABCDEFG83hsad

iughABCDEFG23uy

输出:

ABCDEFG

Demo55 检测密码

题目描述

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

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

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

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

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

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

password = input("请输入密码:")
#定义两个数用来容纳数组中的大写字母和数字个数
num1 = 0
num2 = 0
#判断大写字母和数字个数
for i in password :
    if i.isdecimal() :
        num1 += 1
    elif i.isupper :
        num2 += 1
#判断规则
if len(password) < 8 :
    print("No")
elif password.isalnum() == False :
    print("No")
elif num1 < 2 :
    print("No")
elif num2 < 2 :
    print("No")
else :
    print("Yes")
print(num1 , num2)

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

Demo56 回文素数

题目描述

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

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

#函数检测素数
def is_sushu(num):
    for i in range(2, num // 2 + 1):
        if num % i == 0:
            return False
    return True
 
 #函数检测回文数
def is_huiwenshu(num):
    if str(num) == str(num)[::-1]:
        return True
 
#count统计回文数个数
count = 0
#定义用来循环每一个数的数,从2开始
num = 2
while count < 100:
    if is_sushu(num) and is_huiwenshu(num):
        print("%5d"%num, end=" ")
        count += 1
        #每10个换行
        if count % 10 == 0:
            print()
    num += 1

Demo57 反素数

题目描述

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

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

Demo58 双素数

题目描述

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

输出显示小于1000的双素数

#函数检测素数
def is_sushu(num):
    for i in range(2, num // 2 + 1):
        if num % i == 0:     
            return False
    return True
 
#定义用来循环每一个数的数,从2开始
num = 2
 
while num < 1000 :
    if is_sushu(num) and is_sushu(num + 2) :
        print(f"{num}和{num + 2}是一对双素数")
    num += 1

Demo59 梅森素数

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

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

#函数检测素数
def is_sushu(num):
    for i in range(2, num // 2 + 1):
        if num % i == 0:     
            return False
    return True
 
# 定于数循环
num = 2
 
#梅森数,是指形如2p-1的一类数,其中指数p是素数,常记为Mp。如果梅森数是素数,就称为梅森素数。
while num <= 31 :
    temp = 2 ** num - 1
    if is_sushu(temp) :
        print(f"{temp}是一个梅森素数")
    num += 1

Demo60 平方根的近似求法

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

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

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

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

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

# nextGuess=(lastGuess+n/lasetGuess)/2
#初始化数据
num = float(input("请输入一个数:"))
nextGuess = 0
lastGuess = 1
# 循环求值
while True :
    nextGuess = (lastGuess + num / lastGuess) / 2
    if nextGuess - lastGuess < 0.0001 :
        print(f"{nextGuess}是{num}的平方根的近似值")
        break
    lastGuess = nextGuess

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值