Pthon(二)逻辑控制

练习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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值