magicians=['alice','david','caroline']
for magician in magicians:  #一点要记得带冒号，第一次写就忘了  #此处建议变量命名选择和列表强关联的名字
    print(magician)         #此处给出的结果分行的，因为每次print之后for就循环了一遍，下一次print的结果和上一次没有关系
#此处的for首先取出列表magicians中的第一个元素，并将其赋值给变量magician，然后做出后面的操作，在操作结束后，取出列表中的第二个元素再赋值并进行一遍操作，以此类推，直到列表中的元素用完
for magician in magicians:
    print(f"{magician.title()},that was a nice trick!")
    print(f"I can't wait to see you next time,{magician.title()}.\n")
print('Thank you,everone.That was a nice tirck.') #4.1遍历列表

#for magician in magicians:
#print(magician)  #忘记缩进 #IndentationError: expected an indented block after 'for' statement on line 10
#
#for magician in magicians:
#     print(f"{magician.title()},that was a nice trick!") #此处多缩进一点似乎没有问题
#print(f"I can't wait to see you next time,{magician.title()}.\n") #忘记缩进应该缩进的代码行，结果是该代码行只使用最后的变量值执行一次 #没有语法错误，只是逻辑错误
#
#message='hello world' 
#    print(message)  #不必要的缩进 #函数调用print无需缩进，因为它不是循环的组成部分，这是书上的原话，意思可能是在没有循环的需求时请不要缩进
#
#for magician in magicians:
#    print(f"{magician.title()},that was a nice trick!")
#    print(f"I can't wait to see you next time,{magician.title()}.\n")
#    print('Thank you,everone.That was a nice tirck.')  #缩进了不需要缩进的代码行
#
#for magician in magicians
#    print(f"{magician.title()},that was a nice trick!") #忘记了冒号 #4.2 常见错误
#此处为了编程方便把所有错误形式都转换成了注释，如果想再次测试，把开头的#删掉即可

for vaule in range(1,5): #函数range（）使电脑从第一个数开始数，再第二个数之前停止，所以输出结果之中不包含第二个数 #不过在不加步数的时候一定是正着数的
    print(vaule)         #所以如果我们使用for vaule in range(1,-5)，最后的print之中将不会出现结果，我推测是因为此时1不知到最后应该数到哪里去，因为-5在此处可能不是有效值所以干脆没有动静
numbers=list(range(1,6)) #使用函数list和函数range（）创建数字列表
print(numbers)
numbers=list(range(1,6,2))#函数range（）可以指定步长，第三个数就是步长值
print(numbers)            #经过我的实验，步长值 以及前后数值范围都不可以是浮点数，整数浮点也不行
squares=[]                
for vaule in range(1,11):
    square=vaule**2
    squares.append(square)
    print(squares)       #此处不小心忘了取消缩进，导致了有趣的效果 #方法一，比较繁琐，因为多加了一个变量名
squares=[]  
for vaule in range(1,11):
    squares.append(vaule**2)
print(squares)           #方法二，更简便  #作者注释：有时使用临时变量会使代码更易读，有时却会使代码无意义的边长，在写代码的时候首先要考虑的是清晰易懂并可以完成所需功能的代码，在审核时再考虑优化
digits=[1,2,3,4,5,6,7,8,9]
print(min(digits))
print(max(digits))
print(sum(digits)) #sum函数的作用是对列表全体数字进行加和 #对数字列表进行简单的统计和计算
squares=[vaule**2 for vaule in range(1,11)]
print(squares)        #列表解析 ：将for循环与创建新元素的代码和为一行 
squares=[vaule**2 for vaule in digits] 
print(squares)        #4.3创建数值列表

#exercise
for vaule in range(1,21):
    print(vaule)
for vaule in range(1,11):    
    print(vaule)
numbers=[vaule*1 for vaule in range(1,1001)]
print(sum(numbers))  #此处无需缩进
odd_numbers=list(range(1,21,2))
for odd in odd_numbers:  #不要把连字符当成下划线
    print(odd)
tree=[]
for number in range(3,31,3):
    tree.append(number)
print(tree)
for number in range(1,10):
    tree.append(number**3)
print(tree)
tree=[number**3 for number in tree]
print(tree)
#exercise down

players=['a','b','c','d','e','f','g']
print(players[0:3])  #此处使用冒号，不要逗号 #切片[:],用于处理列表的部分元素
print(players[1:4]) 
print(players[:4]) 
print(players[1:]) 
print(players[:-4]) #前后使用空格而非数字则默认从第一个/到最后一个
print(players[-1:]) 
print(players[-1]) #注意80，81行的区别，如果不加冒号，出来的就是数字，而非列表切片
print(players[:]) 
players=['a','b','c','d','e','f','g']
print('we need:')
for player in players[:3]:
    print(player.title()) #遍历切片
my_food=['pizza','cake','dog food'] 
my_friend_feed=my_food[:]  #复制列表 此处我们将my_food照抄了一份赋值给了my_friend_food,不会对my_feed原本的数据产生影响
print(my_food)
print(my_friend_feed)
my_food.append('chicken')
my_friend_feed.append('fish')
print(my_food)
print(my_friend_feed) #1
my_food=['pizza','cake','dog food'] 
my_friend_feed=my_food  #此处直接将二者联接，此后二者的变化会联通，因此谨慎使用该链接方法
print(my_food)
print(my_friend_feed)
my_food.append('chicken')
my_friend_feed.append('fish')
print(my_food)
print(my_friend_feed) #4.4使用列表的一部分

#exercise 内容与上文类似，不写了

dimensions=(20,40) #元组，与列表不同，元组是不可修改的，除非你使用重新定义彻底覆盖原来的值，如112行
print(dimensions)
print(dimensions[0])
print(dimensions[1])
#dimensions[0]=260
dimensions=(20,60)
print(dimensions) #4.5元组

print('设置代码格式')
print('需注意 1.缩进 2.行长不大于八十个字符 3.空行 4.其他格式设置见python官网PEP8指南') #4.6设置代码格式