# 1.代码简写
age = 18
if age >= 18: print('成年')
for x in range(3): print('hello world!')
# 2.三目运算
# 值1 if 条件 else 值2
# 3.for循环
"""
for 变量 in 序列:
循环体
"""
# 4.range函数 - 创建等差数列
"""
range(N)
range(M,N)
range(M,N,step)
"""
# 5.while循环
"""
while 条件语句:
循环体
"""
# 6.循环选择
# 循环次数确定 - for循环
# 循环次数不确定 - while循环
# 7.continue、break、else
"""
while True:
需要重复执行的操作
if 循环结束条件:
break
"""
# 1.根据输入的成绩的范围打印及格 或者不及格。
# score = float(input('请输入分数:'))
# if score >= 60:
# print('及格')
# else:
# print('不及格')
# 2.根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!。
# age = int(input('请输入年龄:'))
# 方法1:
# if age < 0 or age > 150:
# print('这不是人!')
# elif age < 18:
# print('未成年')
# else:
# print('成年')
#
# if age >= 18 and age < 150:
# print('成年')
# elif age < 18 and age > 0:
# print('未成年')
# else:
# print('这不是人!')
# 方法2:
# if 0 <= age <= 150:
# if age < 18:
# print('未成年')
# else:
# print('成年')
# else:
# print('不是人!')
# 3.输入两个整数a和b,若a-b的结果为'奇数',则输出该结果,否则输出提示信息'a-b的结果不是奇数'
# a = int(input('请输入一个整数:'))
# b = int(input('请输入一个整数:'))
# # 方法1:
# if (a - b) % 2 == 0:
# print('a-b的结果不是奇数')
# else:
# print(a - b)
#
# # 方法2:
# result = 'a-b的结果不是奇数' if (a-b) % 2 == 0 else a - b
# print(result)
# 4.使用for循环输出 0~100内所有3的倍数。
# 0、3、6、9、12、15、...、99
# for x in range(0, 100, 3):
# print(x)
# 5.使用for循环输出100~200内个位数或者十位数能被3整除的数。
# 103、106、109、113、116、119、123、126、129、130、131、132、...
# for x in range(100, 201):
# units = x % 10
# tens = x // 10 % 10
# if (units % 3 == 0 and units != 0) or (tens % 3 == 0 and tens != 0):
# print(x)
# 6.使用for循环统计100~200中十位数是5的数的个数
# count = 0
# for x in range(150, 160):
# count += 1
# print(count)
# 7.使用for循环打印50~150中所有能被3整除但是不能被5整除的数
# 51,54,57,..
# for x in range(51, 151, 3):
# if x % 5 != 0:
# print(x)
# 8.使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
# sum1 = 0
# for x in range(51, 151, 3):
# if x % 5 != 0:
# sum1 += x
# print(sum1)
# 9.统计100以内个位数是2并且能够被3整除的数的个数。
# 2、12、22、32、...
# count = 0
# for x in range(2, 100, 10):
# if x % 3 == 0:
# count += 1
# print(count)
# 1. 输入任意一个正整数,求他是几位数?
# 6728 // 10 -> 672 // 10 -> 67 // 10 -> 6 // 10 -> 0
# 109 // 10 -> 10 // 10 -> 1 // 10 -> 0
# 方法:任意一个正整数整除多少次10以后会变成0,那么这个数就是一个几位数
# num = int(input('请输入一个正整数:'))
# count = 0
# while True:
# num //= 10
# count += 1
# if num == 0:
# break
# print(count)
# 2.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。
# 例如:153是⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。
# 100, 101, 102,...,999
for x in range(100, 1000):
units = x % 10
tens = x // 10 % 10
hundreds = x // 100
if units ** 3 + tens ** 3 + hundreds ** 3 == x:
print(x)
# 3.判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
# 1、2、3、5、7、11、13等
# 方法:从2到这个数减1之间能不能找到一个能被它整除的数,如果找不到就是素数,只要找到一个就不是素数
# 方法1:
num = 100
count = 0 # 保存2到这个数减1之间能被这个数整除的数的个数
for x in range(2, int(num**0.5+1)):
if num % x == 0:
count += 1
print(num, '不是素数!')
break
if count == 0:
print(num, '是素数!')
# 方法2:
print('------------------------------------------华丽的分割线------------------------------------------------')
num = 230
for x in range(2, int(num**0.5+1)):
if num % x == 0:
print(num, '不是素数!')
break
else:
print(num, '是素数')
# 4.输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for row in range(1, 10):
for col in range(1, row+1):
print(col, '×', row, '=', col * row, end=' ')
print()
"""
row = 1 -> 1 range(1, 2)
row = 2 -> 1, 2 range(1, 3)
row = 3 -> 1, 2, 3 range(1, 4)
...
row = 9 -> 1,2,3,4,5,6,7,8,9 range(1, 10)
-> range(1, row+1)
"""
# 5.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
"""
1大、1中、98小
1大、2中、97小
....
2大、1中、97小
2大、2中、96小
2大、2中、95小
...
3大、1中、96小
3大、2中、95小
3大、2中、94小
"""
for big in range(1, 34):
for middle in range(1, 51):
small = 100 - big - middle
if small % 2 != 0:
continue
if big*3 + middle*2 + small / 2 == 100:
print('大:', big, '中:', middle, '小:', small)
# 计算机编程常用的进制:十进制、二进制、十六进制、八进制
# 1.十进制
"""
1)基数: 0、1、2、3、4、5、6、7、8、9 (199、287、2039)
2)进位:逢10进1
3)表示方式:直接写
4)转换: print(其他进制的数)
"""
num1 = 39
num2 = 4
# 2.二进制
"""
1)基数:0、1 (01、001、101、111001)
2)进位:逢2进制1 0+1 - 1 1+1 - 10
3)表示方式:在二进制数前加'0b'或者'0B'
4)转换: bin(其他进制数)
"""
num3 = 0b100
print(num3) # 4
print(type(num3)) #
print(bin(100)) # 0b1100100
# num4 = 0b1120 # 报错
# 3.八进制
"""
1)基数:0、1、2、3、4、5、6、7 (67、032)
2)进位:逢8进1
3)表示方式:在八进制数前加'0o'或者'0O'
4)转换: oct(其他进制数据)
"""
num5 = 0o67
print(num5) # 55
print(oct(199)) # 0o307
print(oct(0b11001001)) # 0o311
# 4.十六进制
"""
1)基数: 0、1、2、3、4、5、6、7、8、9、a/A、b/B、c/C、d/D、e/E、f/F (aaa、a0f、4e00、1990)
2)进位:逢16进1
3)表示方式:在16进制数前加0x、0X
4)转换: hex(其他进制数)
"""
num6 = 0xaaf
print(0x1001 * 2)
num7 = 0x100
print(hex(100)) # 0x64
print(100 == 0x64)
# 7.0
# $1 == ¥7
# 1.列表的作用 - 同时处理多个数据的时候,列表的存在可以让问题变得简单
scores = [89, 92, 67, 90, 100, 45, 55, 90, 61, 78]
# s1 = 89
# s2 = 92
# s3 = 67
# s4 = 90
# s5 = 100
# s6 = 45
# s7 = 55
# s8 = 90
# s9 = 61
# s10 = 78
#
# total_score = s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10
# print('平均分:', total_score / 10)
print('平均分:', sum(scores)/len(scores))
# max_score = s1
# if s2 > max_score:
# max_score = s2
# if s3 > max_score:
# max_score = s3
# if s4 > max_score:
# max_score = s4
# if s5 > max_score:
# max_score = s5
# if s6 > max_score:
# max_score = s6
# if s7 > max_score:
# max_score = s7
# if s8 > max_score:
# max_score = s8
# if s9 > max_score:
# max_score = s9
# if s10 > max_score:
# max_score = s10
# print('最高分:', max_score)
print('最高分:', max(scores))
# 2. 认识列表(list)
"""
1)
列表Python自带的类型,属于容器型数据类型(可以同时保存多个数据);
将[]作为容器的标志,里面多个元素(容器中每个独立的数据)用逗号隔开: [数据1,数据2,数据3,...]
2)
列表是可变的(可变指的容器中元素的个数和元素的值可变) - 支持增删改操作
列表是有序 - 支持下标(索引)操作
3)
任何类型的数据都可以作为列表的元素;
同一个列表可以放不同类型的数据。
"""
# 空列表
list1 = []
list2 = [10, 34, 109]
list3 = [10, 20, [30, 40]]
list4 = [10, 'abc', True, None, [1, 2], (10, 20), {11, 22}, {'a': 100}]
print(list4)
# 有序序列顺序影响结果(字符串和列表有序)
print([10, 20, 30] == [20, 10, 30]) # False
print('abc' == 'bac') # False
# 集合无序
print({10, 20, 30} == {20, 30, 10}) # True
# 查 - 获取列表中的元素
# 1.查单个 - 获取列表中的一个数据
"""
1)语法:
列表[下标] - 获取列表中指定下标对应的元素
2)说明:
列表 - 任何结果是列表的表达式(具体的一个列表、保存列表的变量等)
[] - 固定写法
下标 - 又叫索引;下标指的是列表中的元素在列表中的位置信息。
每个元素的下标值有两个:a.从前往后从0开始不断增加的下标值
b.从后往前从-1开始不断减小的下标值
3)注意:下标不能越界
"""
nums = [50, 78, 99, 30]
print(nums[0], nums[-4])
print(nums[2], nums[-2])
# print(nums[4]) # IndexError: list index out of range
# print(nums[-5]) # IndexError: list index out of range
# 2.切片 - 获取列表中的部分数据
# 1)完整语法
"""
列表[开始下标:结束下标:步长]
a.怎么确定一个切片结果:
第一步:看切片的结果是否为[] -> 看从开始下标位置到结束下标对应的位置的方向和步长对应的方向是否一致
步长为正:表示从前往后取
步长为负:表示从后往前取
第二步:确定有效范围 -> 开始下标对应的元素能取到,结束下标对应的元素取不到
第三步:通过步长在有效范围内获取元素:
步长为正在有效范围内从前往后取;步长为负,在有效范围内从后往前取;
绝对值为1就一个一个的取;绝对值为2,就取1个跳过1个再取1个再跳过1个;绝对值为3,就取1个跳过2个再取1个再跳过2个;....
b.根本目标数据写切片的代码:
第一步:确定开始下标 - 想要获取的所有元素中第一个元素的下标
第二步:确定结束下标 - 想要获取的所有元素中第最后一个元素前面(从后往前取)或者后面(从前往后取)那个元素的下标
第三步:通过获取元素的方向确定正负;通过获取方式确定绝对值
"""
names = ['西施', '孙尚香', '刘备', '马可波罗', '赵云', '孙膑', '后羿', '鲁班7号', '百里守约']
print(names[1:5:2]) # ['孙尚香', '马可波罗']
print(names[-1:5:1]) # []
print(names[2:7:-2]) # []
print(names[-2:-7:-2]) # ['鲁班7号', '孙膑', '马可波罗']
print(names[-1:0:-3]) # ['百里守约', '孙膑', '刘备']
print('------------------------------------------华丽的分割线------------------------------------------------')
print(names[-1:3:1]) # []
print(names[4:-2:2]) # ['赵云', '后羿']
print(names[-3:0:3]) # []
print(names[-2:0:-2]) # ['鲁班7号', '孙膑', '马可波罗', '孙尚香']
print('------------------------------------------华丽的分割线------------------------------------------------')
# '孙尚香', '刘备', '马可波罗'
print(names[1:4:1])
# '刘备', '赵云'
print(names[2:5:2])
# '鲁班7号','赵云', '孙尚香'
print(names[-2:0:-3])
print('------------------------------------------华丽的分割线------------------------------------------------')
names = ['西施', '孙尚香', '刘备', '马可波罗', '赵云', '孙膑', '后羿', '鲁班7号', '百里守约']
# ['孙尚香', '刘备', '马可波罗', '赵云', '孙膑', '后羿', '鲁班7号']
print(names[1:-1:1])
# ['百里守约'、'鲁班7号'、'后羿']
print(names[-1:-4:-1])
# ['刘备','赵云','后羿']
print(names[2:-2:2])
# ['后羿'、'刘备']
print(names[-3:1:-4])
# 2)切片省略语法
# 列表[开始下标:结束下标:步长]
"""
a.省略步长 - 相当于步长是1
列表[开始下标:结束下标]
b.省略开始下标 - 从头开始(如果步长为正从第一个元素开始;如果步长为负,从最后一个元素开始)
列表[:结束下标:步长]
c.省略结束下标 - 如果步长为正,从开始下标开始一直取到最后一个元素;如果步长为负,从开始下标开始一直取到第一个元素
列表[开始下标::步长]
列表[开始下标:]
"""
tvs = ['一人之下', '海贼王', '名侦探柯蓝', '甄嬛传', '越狱', '行尸走肉', '绝命毒师', '穹顶之下']
print(tvs[1:-1])
print(tvs[-2:1])
print(tvs[:-3:2]) # ['一人之下', '名侦探柯蓝', '越狱']
print(tvs[:3:-1]) # ['穹顶之下', '绝命毒师', '行尸走肉', '越狱']
print(tvs[:5]) # ['一人之下', '海贼王', '名侦探柯蓝', '甄嬛传', '越狱']
print(tvs[4::2])
print(tvs[-3::-1])
print(tvs[5:])
print(tvs[::-2])
# 3.遍历 - 一个一个的将列表中的元素取出