<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Lesson 2
Python Basic, Lesson 2, 
* v1.0, 2016
* v1.1, 2020.2,3,4 edit by David Yi
本章内容要点
学习之前
基本变量概念
print() 和 input() 用法
学习之前
从现在开始，我们进入到 Python 正式的学习课程。本课程使用 Jupyter Notebook 格式撰写，推荐你也安装 jupyter notebook 或者通过安装 anaconda 来使用。
我们通过简单的描述和举例来进行 Python 编程开发的讲解，需要你自己运行 notebook 里面的代码，并且最好建议自己输入一遍代码去运行，看看是否得到了预料中的结果，不要怕发生错误，发生错误后，首先检查一下代码输入是否正确，有时候也可以在 jupyter 菜单上找到 Kernel-Restart，重启 jupyter 来解决问题。
我们并不想像标准的编程书籍和教材一样，去系统的讲解很多基本概念，一方面可能有些朋友已经学习过一些电脑编程语言，很多概念都是相通的，另一方面很多基本概念的学习其实是一件比较枯燥的事情，会让我们失去一些学习的兴趣。因此我们尽量用实战来代替，通过例子和自己操作来掌握 Python 的语法，掌握编程的一些理念。或许会碰到搞不懂的一些问题，就先记住怎么操作即可，通过输入代码联系、作业、思考、自己动手编程等方式来学习。
基本变量概念
变量用来在程序中存储内容。变量是编程开发中最基本的概念。
Python 中的变量赋值不需要类型声明。
每个变量在内存中创建，都包括变量的标识，名称和数据这些信息，
每个变量在使用前都必须赋值，变量赋值以后该变量才会被创建，
等号= 用来给变量赋值，
等号= 左边是一个变量名,等号右边是存储在变量中的值。
Step1:  变量是动态的
Python是动态语言，即变量本身的类型不固定。
与之对应的静态语言（如Java），在定义变量时，必须先指定变量类型，赋值时如不匹配会报错。
Step2:  理解 Python 变量在内存中的表示
当我们输入 a = 'ABC' 时，Python解释器做了2件事情：
在内存中创建了一个'ABC'的字符串，
在内存中创建了一个名为a的变量，并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b，这个操作实际上是把变量b指向变量a所指向的数据
Step3:  Python 有一些很优雅的设计，来提升性能，对于0-256这些常用的数字，Python 内部是有缓存的。
print() 和 input() 用法
print() 用来显示内容，input() 用来输入内容，在类似命令行的操作中，这两条语句非常有用。程序要做的事情主要就是三种，输入、计算、输出。所以输入输出命令很重要，让我们迅速的了解电脑程序处理的基本原理，并且了解 Python 语言的基本规则。
在实际应用开发中，在电脑屏幕上输出内容已经比较少了，现在我们看到的大多是网页、移动App和小程序等。在学习过程中，我们主要用 print 来输出内容。
print() 也支持格式化输出，可以将内容按照指定的格式整理输出。
Step4:  下面的例子引入条件判断语句，if 语句。Python 中 if 语句很容易理解，注意条件后面的冒号不要忘记，还有缩进格式。
Python 官方目前有写得不错的中文文档，可以学习。 https
Step5:  下面的例子引入循环语句 for，后面还会详细解释，这里先有个印象即可。
Step6:  print() 格式化输出说明
* %字符：标记转换说明符的开始
转换标志：-表示左对齐；+表示在转换值之前要加上正负号；“”（空白字符）表示正数之前保留空格；0表示转换值若位数不够则用0填充。
最小字段宽度：转换后的字符串至少应该具有该值指定的宽度。如果是*，则宽度会从值元组中读出。
点(.)后跟精度值：如果转换的是实数，精度值就表示出现在小数点后的位数。如果转换的是字符串，那么该数字就表示最大字段宽度。如果是*，那么精度将从元组中读出。
字符串格式化转换类型。
转换类型          含义
* d,i：带符号的十进制整数
* o：不带符号的八进制
* u：不带符号的十进制
* x：不带符号的十六进制（小写）
* X：不带符号的十六进制（大写）
* e：科学计数法表示的浮点数（小写）
* E：科学计数法表示的浮点数（大写）
* f,F：十进制浮点数
* g：如果指数大于-4或者小于精度值则和e相同，其他情况和f相同
* G：如果指数大于-4或者小于精度值则和E相同，其他情况和F相同
* C：单字符（接受整数或者单字符字符串）
* r：字符串（使用repr转换任意python对象)
* s：字符串（使用str转换任意python对象）
Step7:  Python 从3.6版本开始引入 f-string，称为格式化字符串常量，主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 F 修饰符引领的字符串（f'xxx' 或 F'xxx'），以大括号 {} 标明被替换的字段；f-string在本质上并不是字符串常量，而是一个在运行时运算求值的表达式。
f-string 在功能方面不逊于传统的 %-formatting语句和 str.format()函数，同时性能又优于二者，且使用起来也更加简洁明了，因此对于 Python3.6及以后的版本，推荐使用f-string进行字符串格式化。
<ASSISTANT_TASK:>
Python Code:
counter = 100  # 整型变量
miles = 1000.0 # 浮点型（小数）
name = "John"  # 字符串
name2 = 'Tom'
# 显示指定变量名的内容
print(name2)
flag = False  # 布尔值
#显示变量的类型
print(type(flag)) 
# 多个变量赋值, Python 的写法比较简洁
a = b = c = 1
b = 2 
print(a,b,c)
# 字符串变量赋值
s = s1 = 'Hello'
print(s,s1)
# 多个变量赋值
a, b, c = 1, 2, 3
print(a,b,c)
# 交换变量
a, b = 1, 2
a, b = b, a
print(a,b)
Explanation: Lesson 2
Python Basic, Lesson 2, 
* v1.0, 2016
* v1.1, 2020.2,3,4 edit by David Yi
本章内容要点
学习之前
基本变量概念
print() 和 input() 用法
学习之前
从现在开始，我们进入到 Python 正式的学习课程。本课程使用 Jupyter Notebook 格式撰写，推荐你也安装 jupyter notebook 或者通过安装 anaconda 来使用。
我们通过简单的描述和举例来进行 Python 编程开发的讲解，需要你自己运行 notebook 里面的代码，并且最好建议自己输入一遍代码去运行，看看是否得到了预料中的结果，不要怕发生错误，发生错误后，首先检查一下代码输入是否正确，有时候也可以在 jupyter 菜单上找到 Kernel-Restart，重启 jupyter 来解决问题。
我们并不想像标准的编程书籍和教材一样，去系统的讲解很多基本概念，一方面可能有些朋友已经学习过一些电脑编程语言，很多概念都是相通的，另一方面很多基本概念的学习其实是一件比较枯燥的事情，会让我们失去一些学习的兴趣。因此我们尽量用实战来代替，通过例子和自己操作来掌握 Python 的语法，掌握编程的一些理念。或许会碰到搞不懂的一些问题，就先记住怎么操作即可，通过输入代码联系、作业、思考、自己动手编程等方式来学习。
基本变量概念
变量用来在程序中存储内容。变量是编程开发中最基本的概念。
Python 中的变量赋值不需要类型声明。
每个变量在内存中创建，都包括变量的标识，名称和数据这些信息，
每个变量在使用前都必须赋值，变量赋值以后该变量才会被创建，
等号= 用来给变量赋值，
等号= 左边是一个变量名,等号右边是存储在变量中的值。
End of explanation
# 定义一个整数变量
a = 1
print(a)
print(type(a))
# 变成字符串变量
a = 's'
print(a)
print(type(a))
Explanation: 变量是动态的
Python是动态语言，即变量本身的类型不固定。
与之对应的静态语言（如Java），在定义变量时，必须先指定变量类型，赋值时如不匹配会报错。
End of explanation
# 改变变量的内容
a = 'ABC'
b = a
a = 'XYZ'
print(b)
# 用 id() 可以得到变量的内存地址
print(id(a))
print(id(b))
# 指向同一个变量内容的变量内存地址其实是一样的
# 注意id(100)的地址和a 的地址是一样的
a = 100
b = 101
print(id(a))
print(id(b))
print(id(100))
# 变量内容发生变化后，内存地址会发生变化
b = b + 1
print(id(a))
print(id(b))
# 指向同一个变量内容的变量内存地址这里又不一样了
a = 257
b = 257
print(id(a))
print(id(b))
Explanation: 理解 Python 变量在内存中的表示
当我们输入 a = 'ABC' 时，Python解释器做了2件事情：
在内存中创建了一个'ABC'的字符串，
在内存中创建了一个名为a的变量，并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b，这个操作实际上是把变量b指向变量a所指向的数据
End of explanation
# 输出数字和变量内容
print(100)
a = 100
print(a)
# 先通过输入内容到变量，然后再输出
name = input('name:')
print( 'hello', name) 
Explanation: Python 有一些很优雅的设计，来提升性能，对于0-256这些常用的数字，Python 内部是有缓存的。
print() 和 input() 用法
print() 用来显示内容，input() 用来输入内容，在类似命令行的操作中，这两条语句非常有用。程序要做的事情主要就是三种，输入、计算、输出。所以输入输出命令很重要，让我们迅速的了解电脑程序处理的基本原理，并且了解 Python 语言的基本规则。
在实际应用开发中，在电脑屏幕上输出内容已经比较少了，现在我们看到的大多是网页、移动App和小程序等。在学习过程中，我们主要用 print 来输出内容。
print() 也支持格式化输出，可以将内容按照指定的格式整理输出。
End of explanation
# 根据变量a 的值来判断
a = 10
if a > 10:
    print('big')
    g=0
else:
    print('small')
for i in range(13):
    print(i)
Explanation: 下面的例子引入条件判断语句，if 语句。Python 中 if 语句很容易理解，注意条件后面的冒号不要忘记，还有缩进格式。
Python 官方目前有写得不错的中文文档，可以学习。 https://docs.python.org/zh-cn/3/tutorial/controlflow.html#if-statements
End of explanation
for i in 'hello':
    print(i)
# 支持格式化的 print
s = 'hello'
x = len(s)  
print('The length of %s is %d' % (s,x))  
# 更加好，更加 pythonic 的写法：format函数-增强的格式化字符串函数
# 关于format的更多细节，参见 https://docs.python.org/zh-cn/3/library/string.html#format-string-syntax
# 通过关键字传参
print('{greet} from {language}'.format(greet='hello', language='English'))
# 通过位置传参
print('{0} from {1}'.format('hello', 'English'))
# 支持格式化的 print 的另外一种写法
s = 'hello'
x = len(s)  
print('The length of {word} is {length}'.format(word=s,length=x))  
Explanation: 下面的例子引入循环语句 for，后面还会详细解释，这里先有个印象即可。
End of explanation
# 格式化 print 举例
pi = 3.141592653  
print('%10.3f' % pi) #字段宽10，精度3 
print("pi = %.*f" % (3,pi)) #用*从后面的元组中读取字段宽度或精度  
  
print('%010.3f' % pi) #用0填充空白  
  
print('%-10.3f' % pi) #左对齐  
       
print('%+f' % pi) #显示正则表达式
Explanation: print() 格式化输出说明
* %字符：标记转换说明符的开始
转换标志：-表示左对齐；+表示在转换值之前要加上正负号；“”（空白字符）表示正数之前保留空格；0表示转换值若位数不够则用0填充。
最小字段宽度：转换后的字符串至少应该具有该值指定的宽度。如果是*，则宽度会从值元组中读出。
点(.)后跟精度值：如果转换的是实数，精度值就表示出现在小数点后的位数。如果转换的是字符串，那么该数字就表示最大字段宽度。如果是*，那么精度将从元组中读出。
字符串格式化转换类型。
转换类型          含义
* d,i：带符号的十进制整数
* o：不带符号的八进制
* u：不带符号的十进制
* x：不带符号的十六进制（小写）
* X：不带符号的十六进制（大写）
* e：科学计数法表示的浮点数（小写）
* E：科学计数法表示的浮点数（大写）
* f,F：十进制浮点数
* g：如果指数大于-4或者小于精度值则和e相同，其他情况和f相同
* G：如果指数大于-4或者小于精度值则和E相同，其他情况和F相同
* C：单字符（接受整数或者单字符字符串）
* r：字符串（使用repr转换任意python对象)
* s：字符串（使用str转换任意python对象）
End of explanation
a = 3.141592653 
f'a is {a:10.3f}'
Explanation: Python 从3.6版本开始引入 f-string，称为格式化字符串常量，主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 F 修饰符引领的字符串（f'xxx' 或 F'xxx'），以大括号 {} 标明被替换的字段；f-string在本质上并不是字符串常量，而是一个在运行时运算求值的表达式。
f-string 在功能方面不逊于传统的 %-formatting语句和 str.format()函数，同时性能又优于二者，且使用起来也更加简洁明了，因此对于 Python3.6及以后的版本，推荐使用f-string进行字符串格式化。
End of explanation
<END_TASK>