Pthon(二)逻辑控制

    xiaoxiao2025-04-20  3

    练习1:

    """ 需求:输入两个数值: 求两个数的最大公约数和最小公倍数. 最小公倍数=(num1*num2)/最大公约数 缺点:可读性比较差! """ #分析:考虑考虑时间和空间(存储)性能问题 #思路:找出最大值(max)和最小数值(min),在[min,1]看是都能整除则是最大公约数 #思路:最大公倍数=(num1*num2)/最大公约数 #(1)接受外界的两个输入 num1 = int(input('Num1:')) num2 = int(input('Num2:')) #(2)内置函数进行大小比较,找出最小的! mini=min(num1,num2) #(3)求最大公约数-->全局变量-->下方都要用! great_div=1 #由于这里定义了最大公约数是1的情形,所以可以将range中的mini+1换成mini-->省略判断1的情形 for i in range(1,mini): #说明:从大到小迭代-->以变量的形式保存-->不用多次计算! iterator= mini+1-i if num1 % iterator == 0 and num2 % iterator == 0: #直接是最大公约数-->直接退出循环即可 great_div = iterator break #输出最大公约数 print('%d和%d的最大公约数是:%d' %(num1,num2,great_div)) #(4)求最小公倍数 print('%d和%d的最小公倍数是:%d' %(num1,num2,num1* num2/great_div)) #考虑代码的可读性、以及空间和时间的效率!

    练习2:

    """ 需求:打印如下-->后续可以打印四种形式的三角形! * * * * * * * * * * * * * * * """ i=1 while i<=5: for j in range(1,i+1): print('*',end='') print('') i +=1

    练习3:

    """ ***** **** *** ** * #思路:几行几列--->打印空格空格的逻辑关系! #核心:换行!--->什么时候换行,什么时候不换行! """ Num=int(input('Num:')) i=0 #行数 while i<=Num-1: #列数-->每一列的内容 for j in range(Num): #判断-->先打印空格,再打印* if j <i: print(' ',end='') else: print('*',end='') #一行内容打印之后换行-->j确定,for循环执行完毕! i +=1 print('')

    说明核心是要掌握分析的思路和掌握语言的表现方式!

    练习4:

    """ * * * * * * * * * * * * * * * * 需求:正金子塔--->后续(倒金字塔)、正方向(斜)-->四个三角形拼接! """ #(1)接受用户的输入 Num=int(input('Num:')) #(2)while初始化 i=1 while i <=Num: #列:打印空格! for j in range(Num-i): print(' ',end='') #列:打印*!-->在上面的基础上-->一列上! for j in range(1,2*i): print('*',end='') #一行打印之后,进行换行 print('') i +=1

    需求5:

    """ 需求:9*9的乘法表-->注意小细节(换行、制表符) """ row=1 #(1)打印的行数 while row<=9: col=1 #(2)打印的列数 while col<=row: print('%d*%d=%d\t' %(row,col,row*col),end='') col +=1 print('') row +=1

    需求6:回文数(字符串)的判断--->借助工具

    """ 需求:判断一个数是不是回文数? 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数 说明:这里有点取巧-->判断是字符串! """ #将数字转化为字符串比较 Str1=input('Num1:') #倒序 Str2=Str1[::-1] if Str1 == Str2: print('%s是回文数' %(Str1)) else: print('%s不是回文数' %(Str1)

    需求7:回文数的判断--->不借助工具

    """ 需求:判断一个整数是不是回文数--->区别于整数 思路:取各个位数--->然后相乘得到结果! ## 示例: 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。 因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数 """ #(1)模拟接受一个整数 Accept=int(input('Please inut an interget:')) #(2)定义两个变量 #说明1:Before表示对原始数据进行处理后,下次迭代的原始数据 Before=Accept #说明2:After表示反转之后的数字(临时)---->多次反转! #1234321 --> 1 -->12 -->123 --> 1234 --> 12343 -->... After=0 #(3)反转的过程-->结束的条件 while Before >0: #第一次反转之后的数字-->一步一步接近反转的数字! After = After * 10 + (Before % 10) #下一次反转的原始数据 Before=Before // 10 #(4)条件结束判断是不是回文数 if After == Accept: print('%d是回文数' %(Accept)) else: print('%d不是回文数' %(Accet)) """ 思路分析: 1)原始数字除以10所得的余数-->获取各个位置的数字-->乘以10 2)原始数字整除10获得 -->一步一步反转! """

    说明:核心是掌握算法的逻辑!

    需求8:

    """ 说明:判断一个变量名合不合法,直到给出一个合法的变量名结束! 理解变量的定义! """ while True: s=input('Please input something:') if s == 'exit': break #exit() #判断首字母是不是字母或者下划线开头 elif s[0].isalpha() or s[0] == '_': #接着判断其它字符是不是符合要求 for i in s[1:]: if not(i.isalnum() or i == '_'): print('%s变量名不合法' %(s)) break #说明:只要有一个字符不合法就跳出! else: print('%s变量名合法' %(s)) #如果不是的则直接输出-->进行下次循环直到合法! else: print('%s变量名不合法' %(s))

    需求9:

    """ - 题目描述: > 给定一个句子(只包含字母和空格), 将句子中的单词位置反转, 单词用空格分割, 单词之间只有一个空格,前>后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello” - 输入描述: > 输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符) - 输出描述: > 对于每个测试示例,要求输出句子中单词反转后形成的句子 - 示例1: ``` - 输入 hello xiao mi - 输出 mi xiao hello 说明:核心是对题目的理解--->数据有多组,每组占一行-->可能会产生分歧! """ # join split # 说明:split没有指定默认是空格--->列表反转-->以空格连接成字符串! print(' '.join(input().split()[::-1]))

    需求10:参上

    s = """ hello xiao mi hello hua wei hello liu shi shi """ #说明-->我的理解! # 先换行\n # 再空格 str = s.split('\n') #测试:print(str) for i in str[1:]: spl=i.split(' ') inv=spl[::-1] print(' '.join(inv)) #print(inv[::-1])

    需求11:

    """ 2. 小学生算术能力测试系统: 设计一个程序,用来实现帮助小学生进行百以内的算术练习, 它具有以下功能:提供10道加、减、乘或除四种基本算术运算的题目; 练习者根据显示的题目输入自己的答案, 程序自动判断输入的答案是否正确并显示出相应的信息。 """ # 说明:负数也是整数 import random # while--->10次 # 初始化 i = 1 while i <= 10: # 符号集合 op = ['+', '-', '*', '/'] # 生成随机符号和随机数字 char = random.choice(op) num1 = random.randint(0, 100) num2 = random.randint(0, 100) # (1)除数不能为0-->特殊 if char == '/': while num2 == 0: num2 = random.randint(0, 10) # (2)假设学过负数--> # 题目 print('%d%s%d =' % (num1, char, num2), end='') # 学生的输入结果 studnet = int(input()) # 核心-->怎么将运算字符映射成运算符号! if char == op[0]: # 加法 if num1 + num2 == studnet: print('成功,继续哟!') else: print('失败,再接再砺!') elif char == op[1]: # 减法 if num1 - num2 == studnet: print('成功,继续哟!') else: print('失败,再接再砺!') elif char == op[2]: # 乘法 if num1 * num2 == studnet: print('成功,继续哟!') else: print('失败,再接再砺!') else: # 除法-->细节(保留的小数位)-->3.*的特性(除不尽则保留(8位),能除尽则除尽)! # 提示--->除不尽则保留8位小数! if num1 / num2 == studnet: print('成功,继续哟!') else: print('失败,再接再砺!') i += 1

    需求12:

    """ 题目:输入某年某月某日(yyyy-MM-dd),判断这一天是这一年的第几天? 思路1--->三个列表(分别是31天的30天的,以及二月份的) 核心:拆解年月日! 判断在不在列表中!-->进行叠加! 思路2--->比较简单将"每个月份[index]"对应的天数[value]写到列表中! """ #(1)获取内容 cal = input('Please input date following the format: yyyy-MM-dd:') #列表内容-->年、月、日 #(2)进行分割 date = cal.split('-') #(3)获取各个部分的内容-->拆解! year = int(date[0]) #特别说明-->09会转变成9 month = int(date[1]) day = int(date[2]) #(4)自定义列表-->天数和月份的映射 #提示-->0的技巧 arr = [0,31,28,31,30,31,30,31,31,30,31,30,31] #全局变量-->天数 total = 0 #(5)判断是不是闰年 if (year % 4 == 0 and year % 100 !=0) or (year % 400 == 0): #细节:改变列表的元素 arr[2]=29 for i in range(1,len(arr)): #说明:i刚好表示对应月份(索引)-->映射为天数! if month > i: total += arr[i] else: #表示想等,此时直接加上天数即可! total +=day #如果不及时退出-->则会12*12-->会再次循环! break print('天数',total)

     

    最新回复(0)