python零基础入门day1——流程控制语句

为什么我要学python?

python是一门强大的面向对象的程序设计语言。它的效率极高:使用其他语言时,需要上百行的语句,python往往只需要几十行就够了。python的语法有助于创建优美工整可读性强的代码。
人们将python运用于许多方面:编写游戏、web开发、科学计算等等等等。总而言之python是一门十分强大的语言,非常值得我们学习。尤其是在人工智能如此火爆的当下,人人都应该学会python

在下文及以后的文章中,都将使用python3进行描述。

变量

python中要储存数据需要用到变量。
变量的声明与使用如下:

greeting = "Hello python world!"
print(greeting)

第一行代码将"Hello python world!"这个字符串储存到变量greeting中。
第二行代码则将变量greeting中储存的字符串打印出来。

在python中我们不需要像c++,java一样指定变量的类型,变量的类型可以在程序运行时改变。但这并不意味着python是一门类似PHP的弱类型语言,与之相反,python是一门强类型的动态语言。一门语言是强类型语言,意味着这门语言是类型安全的,比如在Python中,有如下定义:

m = "3"

在这段代码中,m的类型为字符串,此时的程序是不允许这样的运算的:

n = m + 1

若是这样输入,python会报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

意思是不能将字符串对象隐式转换为整型变量。这表明python是类型安全的。即python是一门强类型语言。
再来看下面的代码:

m = "3"
m = 3

在第一行中,我们将"3"赋给了变量m,此时m类型为str,即字符串类型。
但在第二行中,我们又将整型变量3赋给了变量m,这样可以吗?

答案是可以的,python支持动态类型转换,python是一门动态语言。

print输出语句

在python中,我们用print语句来向控制台输出
语法如下

打印一条HelloWorld语句
print("Hello python world!")

括号内的内容需要是字符串,但python中许多对象可以直接输出,比如:

print(3.1415926)

在控制台直接输出3.1415926,而不需要用str()显示转换为字符串,python已经帮我们做好了.
又比如:

list = [1, 2, 3]
print(list)

第一行中List是一个列表,第二行中将这个列表输出,得到的结果是[1, 2, 3],这个结果让人觉得非常舒服。

input输入语句

在python中使用input函数实现数据的交互:

username = input("username:")
password = input("password:")

input括号中的字符串为你想在终端中提示的字符串,比如username = input(“username:”)在终端中显示:

username:

之后输入的数据将被保存在变量username中。
input函数在输入时是明文显示的,这在需要输入密码等敏感信息的时候很不方便,为此可以使用getpass模块中的函数。
在文件的开头加入如下语句:

import getpass

再将原代码修改为:

password = getpass.getpass("password:")

在终端输出与使用input时一样,但是输入数据时终端不会显示已输入的文字。

if—else控制语句

可以用if-else语句实现流程控制,具体使用如下:

判断是否成年
age = 16
if age > = 18:
    print("你已经成年啦!")
else:
    print("你还没有成年哦")

第一行中创建了一个变量用来储存年龄,第二行对age的大小进行判断,如果age的数值大于等于18,那么执行下个缩进块中的语句,即输出:

你已经成年啦!

否则age小于18,则输出:

你还没有成年哦
if-else语句块中基本使用形式为:
if 判断语句 :
	要执行的代码块
else:
	条件不成立时执行的代码块
if判断语句之后的冒号非常重要,切记要加上!

生活中常常会出现需要多种判断的情况,这时只用if-else就不够用了,此时可以用elif语句进行多重判断

if score >= 80:
	print("成绩优秀")
elif score >= 60:
	print("成绩良好")
else:
	print("不及格")

当成绩为80分以上时,输出成绩优秀;
成绩大于等于60分而小于80分时,输出成绩良好;
成绩小于60时,输出不及格。

python通过缩进来判定语句之间的关系,如上例中,第三行进行了缩进,他表示如果if中的判断成立,那么执行该代码块。
如果没有缩进:

age = 16
if age > = 18:
print("你已经成年啦!")
else:
    print("你还没有成年哦")

程序无法执行,python会提醒你不要忘记缩进:

  File "<stdin>", line 2
    print("你已经成年啦!")
        ^
IndentationError: expected an indented block

这种强制缩进的语法很好的增加了代码的可读性;简而言之,这种语法使你的代码更加整洁和清晰
养成良好缩进的习惯,不论在什么语言中都有巨大的作用。

while循环

while循环是流程控制中的一种,其基本使用方式如下:

while 循环条件 :
	条件满足时执行的代码块

示例代码如下:

不到最后一刻不停止学习

energy = 100
while energy > 0:
	print("继续学习")
	energy = energy - 1

第一行中创建了一个表示我们精力的变量energy,它的值是100。
第二行中while循环判断energy是否大于0,若是,执行对应的代码块,在这里是输出“继续学习”。
第四行使循环变量energy减1。执行完第四行语句后,程序回到第二行处,判断此时循环变量energy是否还满足条件,若是,继续执行对应代码块…以此类推,直到循环变量energy不满足条件为止。
到程序运行结束,一共输出了100行“继续学习”的字符。

使用else进行更多操作
在上例中,如果想要在循环结束时额外进行操作,可以用如下的代码:

energy = 100
while energy > 0:
	print("继续学习")
	energy = energy - 1
else:
	print("学累了,睡觉")

上述代码在energy变为0后,还额外输出了一条“学累了,睡觉”的字符串。

for循环

for循环是python中的另一种循环,与c/c++中的for循环不相同,与PHP、Java中的foreach循环类似。
其基本使用形式如下

for 元素 in 列表 :
	要执行的代码块

如:

for value in range(10):
	print(value)

输出了0到9之间所有的整数。
for循环之后依然可以接上else语句进行额外操作:

for value in range(10):
	print(value)
else:
	print("数完了")

在输出完所有数字后再输出一行“数完了”的字符串。

作业1:编写登录接口

  • 执行程序时提示输入用户名及密码
  • 用户名及密码输入正确时打印一条欢迎信息,失败时提示错误并重新输入
  • 在文件中读取用户信息(优化)
  • 失败三次后锁定用户(不能登录),将锁定的用户写入另一个文件(优化)

首先要求用户输入用户名和密码:

import getpass

username = input("username:")
password = getpass.getpass("password:")

然后对用户名及密码进行判断:

...

if username == "xiaoming" and password == "123456":
	print("欢迎您,", username)
else:
	print("用户名或密码错误!")

当输入用户名为xiaoming及密码为123456时提示欢迎信息,否则提示用户名或密码错误。
我们想提示用户名及密码错误时让用户重新输入而不是结束程序,于是我们在程序中加入一个while循环,具体如下:

...

while True:
	username = input("username:")
	password = getpass.getpass("password:")
	if username == "xiaoming" and password == "123456":
		print("欢迎您,", username)
		break
	else:
		print("用户名或密码错误!")
		continue

加入while循环实现流程控制,当输入正确时,输出欢迎信息并退出程序,当输入不正确时输出错误信息并要求用户重新填写。

从文件中读取用户信息
我们希望在文件中读取用户名和密码信息,将代码改成如下形式:

...
import json

users_path = "users.json"
users = {}
with open(filename) as file_object:
	users = json.load(f_obj)
while True:
	username = input("username:")
	if username not in users.keys():
		print("用户不存在")
		continue
	while True:
		password = getpass.getpass("password:")
		if users[username] == password:
			print("欢迎您,", username)
			break
		else:
			print("密码错误!")
			continue

在文件开头导入json模块,使得程序能够从json文件中读取信息。
在接下来几行中,我们创建了变量user_path用来储存用户名文件的地址;users变量用于储存从json文件中读取的数据。然后我们用open函数来打开文件,用json.load函数来解析该文件,并将解析的结果储存在user中。在输入用户名以后,我们检测所输入的username是否存在于字典users中,若不存在则提示一条信息并重新输入。若用户名存在,那么输入密码,检测方式与上面大致相同,不同的是这次检测的是字典users中键username对应的值是否和password相同。

输入正确密码后我们希望直接退出程序,而不是输入下一个用户名,但是现在程序处于内层循环中,单纯用break已经解决不了问题了,所以我们在程序开头加入如下语句:

import sys

并且将输入正确时的语句改成如下形式:

...
if users[username] == password:
	print("欢迎您,", username)
	sys.exit()
...

在输入正确密码后直接退出程序。

输入三次锁定
现在我们希望用户在输入不正确的密码三次后将该用户锁定,于是在程序开头加入:

...
lock_path = "lock.json"
lock = []
with open(lock_path) as file_object:
	lock = json.load(file_object)
...

将锁定的名单保存在lock.json文件中,并将文件中的信息读取到lock中。
在用户名检测时增加对锁定用户的检测:

...
if username not in users.keys():
	print("用户不存在")
	continue
elif username in lock:
	print("该用户已被锁定")
	continue
...

输入三次错误密码后将该用户锁定:

...
while True:
	password = getpass.getpass("password:")
	count = 0
	if users[username] == password:
		print("欢迎您,", username)
		break
	else:
		print("密码错误!")
		count = count + 1
		if count >= 3:
			print("输入三次错误密码,您的用户已被锁定!")
			lock.append(username)
			with open(lock_path, "w") as file_object:
				json.dump(lock, file_object)
			break
		continue

我们创建了一个用来储存错误次数的变量count,并在每次输入错误时将count加1,当count大于等于3时,提示用户将要锁定用户,并将该用户名加入lock列表中,然后储存在lock.json中,最后退出循环,程序重新回到输入用户名处。

全部代码如下:

import sys
import json

users_path = "users.json"
lock_path = "lock.json"
users = {}
lock = []
with open(filename) as file_object:
	users = json.load(f_obj)
with open(lock_path) as file_object:
	lock = json.load(file_object)

while True:
	username = input("username:")
	if username not in users.keys():
		print("用户不存在")
		continue
	while True:
		password = getpass.getpass("password:")
		if users[username] == password:
			print("欢迎您,", username)
			sys.exit()
		else:
			print("密码错误!")
			count = count + 1
			if count >= 3:
				print("输入三次错误密码,您的用户已被锁定!")
				lock.append(username)
				with open(lock_path, "w") as file_object:
					json.dump(lock, file_object)
				break
		continue

作业2:多级菜单

  • 三级菜单
  • 可依次选择进入各子菜单
  • 增加快捷键b:当输入b时返回上一级
  • 增加快捷键q:当输入q时退出程序
  • 所需新知识点:列表、字典

首先创建各级子菜单:

# 中国省份
china = {}
# 广东
gd = {}
# 广州
gz = ["天河区", "越秀区", "花都区"]

gd["广州"] = gz
china["广东"] = gd

作为例子的是全国的省、市、区三级菜单,为方便起见我们这里只用广东省广州的菜单。上述程序中我们创建了一个储存全国省份的字典china,一个储存广东所有市的字典gd,还有一个储存广州所有区的列表gz。在后面的代码中,我们将列表与字典一一嵌套,形成一个完整的省、市、区三级菜单。

接下来我们完成菜单的选择部分:
在程序开头加入:

import sys

然后在程序中加入

...
while True:
    for province_name in china.keys():
        print(province_name)
    province = input("请输入要选择的省:")
    # 如果有这个省
    if province in china.keys():
        current_list = china[province]
        for city_name in current_list:
            print(city_name)
        while True:
            city = input("请输入要选择的市:")
            # 如果有这个市
            if city in current_list.keys():
                current_list = current_list[city]
                while True:
                    for area_name in current_list:
                        print(area_name)
                    area = input("请选择要输入的区:")
                    # 如果有这个区
                    if area in current_list:
                        print("您选择的是:", province, city, area)
                        sys.exit()
                    else:
                        print("没有这个区!请重输!")
                        continue
            else:
                print("没有这个市!请重输!")
                continue
    else:
        print("没有这个省!请重输!")
        continue
		

在程序开头我们输出所有省的名称供用户选择,随后提示用户输入所要选择的省的名称,如果该省存在,那么进入下一步,否则重新输入要选择的省的名称…以此类推当选择完省、市、区三级后输出用户所选择的信息,程序结束。

在程序中,我们使用了current_list来储存当下操作的字典或列表,以增加代码的清晰度。

我们希望在输入时能有一些快捷键供我们对程序进程做一些操作,我们可以在每条input的if-else语句中增加一些语句:

...
if area in current_list:
    print("您选择的是:", province, city, area)
    sys.exit()
elif area == "b":
    break
elif area == "q":
    sys.exit()
else:
    print("没有这个区!请重输!")
    continue
...

程序全部代码如下:

import sys

# 中国省份
china = {}
# 广东
gd = {}
# 广州
gz = ["天河区", "越秀区", "花都区"]

gd["广州"] = gz
china["广东"] = gd

while True:
    for province_name in china.keys():
        print(province_name)
    province = input("请输入要选择的省:")
    # 如果有这个省
    if province in china.keys():
        current_list = china[province]
        for city_name in current_list:
            print(city_name)
        while True:
            city = input("请输入要选择的市:")
            # 如果有这个市
            if city in current_list.keys():
                current_list = current_list[city]
                while True:
                    for area_name in current_list:
                        print(area_name)
                    area = input("请选择要输入的区:")
                    # 如果有这个区
                    if area in current_list:
                        print("您选择的是:", province, city, area)
                        sys.exit()
                    elif area == "b":
                        break
                    elif area == "q":
                        sys.exit()
                    else:
                        print("没有这个区!请重输!")
                        continue
            elif city == "b":
                break
            elif city == "q":
                sys.exit()
            else:
                print("没有这个市!请重输!")
                continue
    elif province == "b":
        print("已经是最上级!")
    elif province == "q":
        sys.exit()
    else:
        print("没有这个省!请重输!")
        continue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值