【Python】从入门到入土2

目录

Python流程控制语句

1.if语句

2.if-else语句

3.if-elif-else语句

Python练习

Python数据类型

1.序列

2.列表

3.切片

列表中的增删改查:

列表通用方法:

实验练习

range函数

 对多层循环的处理

元组Tuple

序列的比较

字典

删除:

遍历:

字典的实际运用:

字符串:

集合:

 集合的运算:


Python流程控制语句

1.if语句

语法结构:

if 条件表达式:     # 用冒号代表语句块开始
    代码块        # 缩进非常重要

a = 10
if a > 10:
    print('大于10')
    print('hello')
input()

name = input('请输入您的姓名')
print(type(name),name)
所有输入的内容都是当作字符串

2.if-else语句

if 条件表达式 :
    代码块
else :
    代码块

3.if-elif-else语句

if 条件表达式 :
    代码块
elif 条件表达式 :
    代码块
elif 条件表达式 :
    代码块
elif 条件表达式 :
    代码块
else : 
    代码块

Python练习

1. 输入一个数,判断是否是水仙花数

num=int(input())
if num < 100 or num > 999:
    print('请输入一个三位数')
else:
    a = num//100
    b = num%10
    c = num//10%10
    if a**3+b**3+c**3 == num:
        print(num,'是水仙花数')
    else:
        print(num,'不是水仙花数')

2.输入年月日,判断这天是这一年的第几天

year = int(input('请输入年'))
month = int(input('请输入月'))
day = int(input('请输入日'))
isLeapYear = True if (year%4==0 and year%100!=0) or year%400==0 else False
sum = 0
if month == 12:
    sum += 30
    month-=1
if month == 11:
    sum += 31
    month-=1
if month == 10:
    sum+=30
    month-=1
if month == 9:
    sum+=31
    month-=1
if month == 8:
    sum+=31
    month-=1
if month == 7:
    sum+=30
    month-=1
if month == 6:
    sum+=31
    month-=1
if month == 5:
    sum+=30
    month-=1
if month == 4:
    sum+=31
    month-=1
if month == 3:
    if isLeapYear:
        sum+=29
    else:
        sum+=28
    month-=1
if month == 2:
    sum+=31
    month-=1
sum+=day
print(sum)



#或者


import datetime
import calendar

year=int(input('请输入4位数字的年份:'))#获取年份
month=int(input('请输入月份1到12之间:'))#获取输入月份
day=int(input('请输入日份1到31之间:'))#获取日份

targetDay=datetime.date(year,month,day) # 将输入的日期专格式化成标准的日期
dayCount=targetDay-datetime.date(targetDay.year-1,12,31)#减去上一年最后一天
print('%s是%s年的第%s天。'%(targetDay,year,dayCount.days))

3.BMI 体重和身高换算

计算公式为:BMI=体重(kg)/ 身高(m)²,体重正常:18.5-24.9,超重:25-29.9,一级肥胖:30-34.9

输入身高和体重,输出指数和健康情况判断

#BMI=体重/(身高x身高)

h=float(input("请输入你的身高(例如1.60m):"))
w=float(input("请输入你的体重(kg):"))
BMI=w/h**2
if BMI>35:
    print("重度肥胖")
elif BMI>=30:
    print("一级肥胖")
elif BMI>=25:
    print("超重")
elif BMI>=18.5:
    print("体重正常")
else:
    print("偏瘦")

4.我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每

一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗

相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。

编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人

类的年龄。如果用户输入负数,请显示一个提示信息。

old=int(input("请输入小狗的年纪:"))
if old<0:#如果输入的数为负数
    print("请输入正确的年龄")
elif old<=2:
    people=old*10.5
    print("小狗相当于人类年龄为:",people)
else:
    people=2*10.5+(old-2)*4
    print("小狗相当于人类的年龄为:%s"%people)

5. 编写一个程序,从4个整数中找出最小的数,并显示此数。

#先输入四个数
a=int(input("请输入a:"))
b=int(input("请输入b:"))
c=int(input("请输入c:"))
d=int(input("请输入d:"))
min=a
if min>b:
    min=b
if min>c:
    min=c
if min>d:
    min=d
print(f'{a},{b},{c},{d}四个数中最小的数为{min}')

Python数据类型

1.序列

序列是python中最基本的一种数据结构,数据结构是指数据存储的方式

序列是保存一组有序的数据,所有的数据在序列中都有一个唯一的(位置)索引

序列中的有序,指的是数据放入的顺序有序

序列分类:

1)可变序列——列表list

2)不可变序列——字符串str 元组tuple

2.列表

python中的一个对象

列表用来保存多个有序的数据,列表是用来存储对象的对象

列表(List)是Python中使用最多的数据类型,在其他语言中通常叫数组

Python中的列表比其他语言中的数组功能要强劲的多

创建列表:

使用[]创建列表,用,分割元素

列表中可以保存任意类型的元素

可以通过索引访问列表中的元素,索引从0开始,超出范围IndexError:list index out of range

使用len()函数可以获得列表元素的个数

arr=[]#创建空列表
arr=[1,2,3,4,5]#创建列表时指定元素
print(arr,type(arr))

#列表中可以保存任意类型的元素
arr=[1,'Hello',True,None,[1,2,3],print]
print(arr)

列表强大的地方

1.可以使用负数来获取元素,-1代表最后一个元素,-2代表倒数第二个元素

print(arr[-1])

2.支持更多的运算符

3.支持切片

#遍历列表

i=0
while i<len(arr):
  print(arr[i])
  i+=1

#使用负数索引遍历

i=-1
while i>=-len(arr):
  print(arr[i])
  i-=1

#使用for循环遍历

for i in arr:
  print(i)

列表拼接:

使用+可以将两个列表拼接为一个列表

使用*可以将列表复制指定次数

arr2=[1,2,3]+[4,5,6]
print(arr2)

# [1, 2, 3, 4, 5, 6]

print(arr2*3)
#这里指循环输出三遍arr2
# [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

in和not in

in用来检测指定元素是否在列表中,在列表中返回True

not in检测指定元素不在列表中,不在返回True

print(10 in arr2)#False
print(10 not in arr2)

3.切片

切片就是在现有列表的基础上,获取一个子列表

做切片的时候总是返回一个新的列表,不会影响原有的列表

列表[起始:结束:步长] 
起始包含在子列表中,但是结束不包含在新列表中
起始,结束,步长都可以缺省
起始缺省就是从头开始切
结束缺省就是一直切到最后一个元素
步长默认是1

#由上面可知 arr2=[1,2,3,4,5,6]

arr3 = arr2[:]#取[1,2,3,4,5,6]
print(arr3)
print(id(arr2),id(arr3))
print(arr2 == arr3)#因为相等所以返回true

#arr2=[1,2,3,4,5,6]
print(arr2[2:])#取数范围不包括前两个
# [3, 4, 5, 6]
print(arr2[:3])  # 不包含第三个
# [1, 2, 3] 

print(arr2[::2])#每隔两个数取一个 从初始位置开始
# [1, 3, 5]
print(arr2[1::2])#从第二个数开始每隔两个数取一个
# [2, 4, 6]

print(arr2[::-1]) 步长可以为负数,代表倒过来取元素,不能取0
# [6, 5, 4, 3, 2, 1] 


#取字符串的操作

s = 'abcdefghijk'
print(s[0:3])#abc 取3个数
print(s[:-3])#abcdefgh 除后三个数不取
print(s[::2])#acegik 隔两个数取一个
print(s[::-1])#kjihgfedcba 倒着取数

列表中的增删改查:

查看对象的方法和属性使用dir

print(dir(arr2))
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

修改:直接修改索引对应的元素

arr2[2]=23
print(arr2)

删除:del

a=10
print(a)
del a
print(a)

#提示:NameError: name 'a' is not defined

der arr2[2]
print(arr2)

切片修改

arr2 = [1,2,3,4,5,6]
arr2[0:2] = [10,20] # 使用10和20替换0和1索引上的元素
print(arr2)  		# [10, 20, 3, 4, 5, 6]
arr2[0:2] = [100,200,300] # 新元素替换原来位置的元素,在这是拿3个替换了2个

arr2[::2] = [10,30,50] 
print(arr2)  		# [10, 2, 30, 4, 50, 6]

切片删除 del

切片修改删除只用可变序列,字符串不可以用切片修改删除的方法

arr2 = [1,2,3,4,5,6]
del arr2[0:2](从第0个开始 删除两个)
print(arr2)	 # [3, 4, 5, 6]

arr2 = [1,2,3,4,5,6]
del arr2[::2](从第一个开始每隔一个删除一个)
print(arr2)  # [2, 4, 6]

arr2 = [1,2,3,4,5,6]
arr2[1:4] = [](从第二个开始到第四个全为null)
print(arr2)	 # [1, 5, 6]

#删除最后一个元素

arr2 = [1,2,3,4,5,6]
# del arr2[-1:]
# del arr2[len(arr2)-1]
# arr2[-1:] = []
print(arr2)

列表通用方法:

| 函数 | 功能               | 说明           |
| ---- | ------------------ | -------------- |
| len  | 获取容器元素个数  
| del  | 删除变量         
| max  | 返回容器中的最大值 | 一定是可排序的 |
| min  | 返回容器中的最小值 | 一定是可排序的 |

可以使用对象.方法() 方式调用

| 函数   | 功能                                           
| ------ | --------------------------------------------
| index  | 找出某个元素在列表中的位置           
| append | 在列表的末尾增加元素                        
| insert | 插入新元素到指定位置,第一个参数是索引       
| extend | 将另外一个列表追加到后面                      
| reomve | 删除列表中的第一个指定元素,如果元素不存在则报错
| clear  | 清空                                         
| pop    | 默认弹出最后一个元素,也支持索引弹出           
| count  | 统计列表中元素的个数                            
| sort   | 排序,默认是升序                          

#index-找出某个元素在列表中的位置
arr = ['zhangsan','lisi','wangwu']
print(arr.index('lisi'))  
# 1

#append-在列表的末尾增加元素
arr.append('chenliu')
print(arr) # ['zhangsan', 'lisi', 'wangwu', 'chenliu']

#insert-插入新的元素到指定位置
arr.insert(1,'tianqi')
print(arr) # ['zhangsan', 'tianqi', 'lisi', 'wangwu', 'chenliu']
# 一次只能插一个对象
arr.insert(1,['tianqi','huba'])
print(arr) # ['zhangsan', ['tianqi', 'huba'], 'lisi', 'wangwu']

# extend-追加另外一个列表到后面
arr2 = [1,2,3]
arr.extend(arr2)
#追加字符串的时候,实际上是追加一个个字符的列表
arr.extends('xu9')
# ['zhangsan', 'lisi', 'wangwu', 'x', 'u', '9']

#remove-删除列表中的第一个指定元素,如果元素不存在则报错
arr = ['zhangsan','lisi','wangwu']
arr.remove(1)
print(arr)

# ValueError: list.remove(x): x not in list

#移出lisi
arr = ['zhangsan','lisi','wangwu']
arr.remove('lisi') 
print(arr)  
# ['zhangsan', 'wangwu']

#重复则删除靠前的
arr = ['zhangsan','lisi','lisi','wangwu']
arr.remove('lisi') # 只删除第一个
print(arr)
# ['zhangsan', 'lisi', 'wangwu']

arr = ['zhangsan','lisi','wangwu']
print(arr.pop())   # wangwu
print(arr)		   # ['zhangsan', 'lisi']
pop-弹出元素lisi

count-统计4出现的次数

sort-按照升序排列数组

sort-按照倒序排列数组

倒序排列


实验练习

完成一个学生管理系统(SMS),用列表和循环实现

命令行版本

功能

1. 查询:显示系统中所有学生
2. 添加:将学生添加到系统中
3. 删除:将学生从系统中删除
4. 退出

student_list = {}
def menu():
    print("*" * 30)
    print("欢迎访问学生管理系统")
    print("*" * 30)
    print("********1:添加学生************")
    print("********2:删除学生************")
    print("********3:修改学生************")
    print("********4:显示学生信息********")
    print("********5:关闭学生管理系统****")
    print("*" * 30)
#增
def add_student():#增加学生方法
    id = input("请输入学生的学号:")
    name = input("请输入学生的姓名:")
    sex = input("请输入学生的性别:")
    phone = input("请输入学生的联系方式:")
    student_info = {'name': name, 'sex': sex, 'phone': phone}
    student_list[id] = student_info
    print("添加成功")
#删
def delete_student():#删除学生方法
    id = input("请输入要删除的学生学号:")
    if id not in student_list.keys():
        print("未找到该学生")
        delete_student()
    student_list.pop(id)
    print("您删除了该学生信息")
#改
def edit_student():#编辑学生
    id = input("请输入要修改的学生学号:")
    if id not in student_list.keys():
        print("未找到该学生!")
        return
    student_info = student_list[id]
    print("你当前修改学生的学号%s 姓名%s 性别%s 联系方式%s"%(id,student_list[id]['name'],student_list[id]['sex'],student_list[id]['phone']))
    print("*"*30)
    print("请输入要修改的内容编号")
    print("1:姓名")
    print("2:性别")
    print("3:联系方式")
    print("4:全部信息")
    print("*"*30)
    edit_news = input("请输入编号:")
    if edit_news == "1":
        newname = input("请输入学生的姓名:")
        student_list[id]['name'] = newname
    elif edit_news == "2":
        newsex = input("请输入学生的性别:")
        student_list[id]['sex'] = newsex
    elif edit_news == "3":
        newphone = input("请输入学生的联系方式:")
        student_list[id]['phone'] = newphone
    elif edit_news == "4":
        newname = input("请输入新的学生姓名:")
        newsex = input("请输入学生性别:")
        newphone = input("请输入学生联系方式:")
        student_list[id]['name'] = newname
        student_list[id]['sex'] = newsex
        student_list[id]['phone'] = newphone
        print("修改成功")
    else:
        print("输入有误")
#查
def show_student_list():
    print("*" * 30)
    for id, value in student_list.items():
        print("学号:%s 姓名:%s 性别:%s 联系方式:%s" % (id, value['name'], value['sex'], value['phone']))
def main():
    while True:
        menu()
        user_input = input("请输入你要选择操作的数字:")
        if user_input == "1":
            add_student()
        elif user_input == "2":
            delete_student()
        elif user_input == "3":
            edit_student()
        elif user_input == "4":
            show_student_list()
        elif user_input == "5":
            quit_menu = input("请确认要退出系统吗?(yes or no):")
            if quit_menu == 'yes':
                break
        else:
            print("你的输入有错误")
main()

range函数

一个用来生成自然数序列的函数

arr=range(5)#生成随机数范围是(0-4)
for i in arr:
  print(i)

print(list(arr))#输出arr

#range(start,end,step) range的参数可以有三个,起始位置,结束位置,步长(默认1)

arr=range(10,20,4)
print(list(arr))
#输出[10,14,18] 从10开始每隔4个数取一个直到20


可以通过range()创建一个指定执行次数的for循环

for i in range(1,11):
  print(i)
else:
  print("end")
图像结果

 对多层循环的处理

1.封装到一个方法内,用return解决

def f():
  for i in range(1,10):
    for j in range(1,i+1):
      if i*j>25:
        return
      print("%dx%d=%d"%(i,j,i*j),end='')
    print()
f()

2.通过写一个布尔变量,来判断是否跳出

flag=True
for i in range(1,10):
  for j in range(1,i+1):
    if i*j>25:
      flag=False
      break
    print("%dx%d=%d"%(i,j.i*j),end='')
  if not flag:
    break
  print()

3.用循环自带的else结构来实现

for i in range(1,10):
  for j in range(1,i+1):
    if i*j>25:
      flag=False
      break
    print("%dx%d=%d"%(i,j,i*j),end='')
  else:
    print()
    continue
  break

4.抛出异常

4.元组Tuple

元组是一个不可变的序列,所有的操作方式基本上和列表一致

使用()来创建元组

#创建一个空元组
t=()
print(t,type(t))

t1 = (1,2,3,4,5)
print(t1)
#打印元组

print(t1[3])#使用[index]去访问tuple中的元素(元组中的数据不能修改)
t1[3]=5
# TypeError: 'tuple' object does not support item assignment 否则会产生以上报错

#当tuple不是空的时候,可以忽略()
t2=10,20,30,40,50
print(t2)
#元组的解包-即分别输出元组中的元素

a,b,c,d,e=t2
print(a)
print(b)
print(c)
print(d)
print(e)

#可以利用元组的解包特点来交换数值
a=10
b=20
a,b=b,a
print(a,b)

#因为是逐个对应所以进行解包的时候要匹配
# 少了会
# ValueError: too many values to unpack (expected 4)
# 多了会
# ValueError: not enough values to unpack (expected 6, got 5)

#可以利用*来匹配元组,只能出现一次
a,b,*c = t2
print(a)
print(b)
print(c)
#c会打印出剩下的所有没被包括的元组
10
20
[30, 40, 50]

序列的比较

即比较两个序列的值

arr1=[1,2,3]
arr2=[1,2,3]
print(arr1==arr2)#在python中==即为比较两个序列的值
#True

t1 = 1,2,3
t2 = 1,2,3
print(t1 == t2)
# True

# 比较是否是同一个 is修饰符 
print(t1  is t2) 	# False
print(arr1 is arr2) # False

字典

相当于java的map结构,java中HashMap

列表存储性能很好,列表是最快索引查找,如果是查询某一个,性能很差

链表是适合最简单的增加 删除

字典因为是key-value结构,查询特定元素很快

d={}#创建一个空的字典
print(d)

d={'zhangsan':80,'lisi':go','wangwu':100}
print(d)

d = {'zhangsan':80, 'lisi':90, 'wangwu': 100}
print(d,type(d))

字典的值可以任意对象,键是不可变对象,一般都是用字符串(str,int,tuple,blood)

# 使用键来获取值
print(d['zhangsan']) # 80
print(d['yangmi'])  # 如果键不存在,会报错 KeyError: 'yangmi'

# 可以使用dict函数来创建字典,参数名就是键(字符串),值就是值
 

d3 = dict(name='张三',age=20)

# 使用len()返回字典的键的个数

# in 可以用来判断是否存在某个键

#get可以根据键来获取值,支持默认值

print(d3.get('name'))   # 张三
print(d3.get('gender')) # None
print(d3.get('gender','男')) # 如果gender为None,则使用默认值'男'

#可以通过键来直接修改值,如果该值不存在则添加,如果该值存在则不添加,否则添加一个默认值。

d3['gender'] = '女'

d3.setdefault('score','80')

删除:

# 删除
del d3['score']
print(d3)
 
d3 = dict(name='张三',age=20)#创建字典,姓名为张三,年龄为20
a = d3.pop('name')#使用pop获取名字
print(a)
print(d3)

# popitem 
a  = d3.popitem()
print(a,d3)
# ('age', 20) {'name': '张三'}

遍历:

# 遍历键        
d = {'zhangsan':80, 'lisi':90, 'wangwu': 100}
for key in d.keys():#key
    print(key,d[key])  
# 遍历值
for v in d.values():#数值
    print(v)      
          
# items取出的都是tuple,可以解包用          
for k,v in d.items():#元组
    print(k,v)          

字典的实际运用:

def do_0():
    print(0)
def do_1():
    print(1)
def do_2():
    print(2)    
switch = {'零': do_0,'一':do_1,'二':do_2}

switch.get('零')()

字符串:

 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',  在指定范围内找一个字符串,相当于java indexOf 没有返回-1
 'format',
 'format_map',
 'index',    和find一样,没有直接报错
 'isalnum',        都是字母和数字
 'isalpha',     都是字母
 'isascii',     
 'isdecimal',   都是数字

#判断b是否是纯数字
b = '0'    '\u00b3'   '零'   
print(b.isdecimal()) # True  False False


 'isdigit',     只包含数字(支持多进制)

#判断b是否包含数字

b = '0'    '\u00b3'   '零'   

print(b.isdigit())   # True  True  False


 'isidentifier',
 'islower',
 'isnumeric',    都是数字 

#判断是否都是数字(甚至支持中文诶)
b = '0'   '\u00b3'   '零'   
print(b.isnumeric()) # True  True  True 可以支持中文大小写


 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',    将字符串分成

#在b前后划分字符串
s = 'aaaaabcccc'
s2 = s.partition('b')
print(s2)
# ('aaaaa', 'b', 'cccc')


#str对完整字符串进行分割,str为从字符串**左侧**开始匹配到的第一个字符串


 'removeprefix',
 'removesuffix',
 'replace', 

#指定把a替换为c 指定次数为2次
s = 'abaacaa'
s1 = s.replace('a','c',2) 可以指定次数哦,默认是全部替换
print(s1)


 'rfind',   从右到左找 相当于java lastIndexOf
 'rindex',
 'rjust',
 'rpartition',

s = 'aaaaabcccc'
s2 = s.partition('b')
print(s2)
# ('aaaaa', 'b', 'cccc')

#从右向左寻找指定字符串并分割

s2 = s.rpartition('b')
# ('aaaaabcc', 'b', 'cccc')


 'rsplit',
 'rstrip',  去除右边的空白
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill'


集合

a = {1,2,3,4,5,5}
print(a)
# {1, 2, 3, 4, 5}

 # 将字符串转换成set

a = set('zhangsan')
print(a)
# {'h', 'a', 'n', 'g', 'z', 's'}

 集合的运算

1.交集 &

a = {1,2,3,4,5,6}
b = {3,4,5,6,7,8}
print(a & b)
# {3, 4, 5, 6}

2.并集 |

print(a | b)
# {1, 2, 3, 4, 5, 6, 7, 8}

3.差集 -

print(a - b)
print(b - a)
print(a - a)
#{1, 2}
#{8, 7}

4.异或 ^

print(a ^ b)
print((a | b) - (a & b) )
# {1, 2, 7, 8}
# {8, 1, 2, 7}

5.一个集合是否包含另外一个集合 <

a = {1,2,3}
b = {1,2,3,4,5}
print(a < b) # True

6.一个集合是否是另外一个集合的超集 >

a = {1,2,3}
b = {1,2,3,4,5}
print(b > a)  # True

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值