一、程序输入输出

目标:

编写login.py脚本,实现以下目标:

  1. 提示用户输入用户名
  2. 将用户名保存在变量中
  3. 在屏幕上显示欢迎用户的信息

方案:

编写程序时,很多情况下都需要程序与用户交互。在python中,主要通过raw_input()获取用户输入信息,使用print打印信息。

通常当想看变量内容时,会在代码中使用print语句输出。不过在交互式解释器中,可以用print语句显示变量的字符串表示,或者仅使用变量名查看该变量的原始值。

从用户那里得到数据输入的最容易的方法是使用raw_input()内建函数。它读取标准输入,并将读取到的数据赋值给指定的变量。需 要注意的是,raw_input()函数读入的数据全部是以字符串的方式存储的。如果用户输的是数字,那么python也将其保存为字符串,当将字符串与 数字做数学运算是将会出现TypeError的错误。

初学者在需要显示信息或得到用户输入时,很容易想到使用print语句和raw_input()内建函数。不过在此建议函数应该保持其 清晰性,也就是它只应该接受参数,返回结果。从用户那里得到需要的数据, 然后调用函数处理, 从函数得到返回值,然后显示结果给用户。这样你就能够在其它地方也可以使用你的函数而不必担心自定义输出的问题。这个规则的一个例外是,如果函数的基本功 能就是为了得到用户输出,或者就是为了输出信息,这时在函数体使用print语句或raw_input()也未尝不可。更重要的,将函数分为两大类,一类 只做事,不需要返回值(比如与用户交互或设置变量的值), 另一类则执行一些运算,最后返回结果。如果输出就是函数的目的,那么在函数体内使用 print 语句也是可以接受的选择。

步骤:

步骤一:编写脚本

本次练习的脚本文件是/root/bin/login.py。

[root@py01 bin]# vim login.py
    #!/usr/bin/env python      #shabang解释器是python,env可以有可以没有,写成这样#!/usr/bin/python也是对的,详细看下面备注1
    username = raw_input('username: ')       #使用变量username接收用户输入的字符
    print 'Welcome', username                 #输出欢迎信息,字符串和变量名之间用逗号
                                                #隔开,两者之间自动会加上空格

步骤二:测试脚本执行

[root@py01 bin]# chmod +x login.py       #给脚本添加执行权限
    [root@py01 bin]# login.py
    username: bob                              #输入用户名
    Welcome bob

二、判断合法用户

目标:

编写login.py2脚本,实现以下目标:

  • 提示用户输入用户名和密码
  • 将用户名和密码分别保存在变量中
  • 如果用户名为bob并且密码为123456,则输出Login successful,否则输出Login incorrect

方案:

本题主要是复合的判断语句,写法有如下两种:

  • 使用两个判断语句,先判断用户名,如果用户名正确再判断密码是否正确
  • 在一个判断语句中,同时判断两个条件是否全部成立

步骤:

步骤一:编写脚本

在很多语言中,if后面的判断条件需要使用圆括号或方括号,但是python并不强制,可以直接将判断条件写在if后面,并不会产生错误。

有些时候,判断条件可能有多个(使用and或or连接),为了更好的可读性,建议在这种环境下,将多个条件分别用圆括号括起来。

[root@py01 bin]# vim login2.py
    #!/usr/bin/env python
    username = raw_input('username: ')
    password = raw_input('password: ')
    if username == 'bob':
        if password == '123456':
            print 'Login successful'
        else:
            print 'Login incorrect'
    else:
        print 'Login incorrect'

或将上面的代码改为以下写法:

[root@py01 bin]# vim login2.py
    #!/usr/bin/env python
    username = raw_input('username: ')
    password = raw_input('password: ')
    if username == 'bob' and password == '123456':
        print 'Login successful'
    else:
        print 'Login incorrect'

步骤二:测试脚本执行

[root@py01 bin]# ./login2.py
    username: bob
    password: 123456
    Login successful
    [root@py01 bin]# ./login2.py
    username: bob
    password: abcd
    Login incorrect
    [root@py01 bin]# ./login2.py
    username: tom
    password: 123456
    Login incorrect

步骤三:改进脚本

脚本程序在运行时,应该将敏感的密码隐藏,不要显示在屏幕上。为了实现这个功能,可以使用getpass模块中的getpass方法。

getpass可以像Linux处理密码一样,屏幕上不出现任何字符,但是用户的输入可以保存到相应的变量中。

上面的代码可以改写为:

[root@py01 bin]# vim login2.py
    #!/usr/bin/env python
    import getpass
    username = raw_input('username: ')
    password = getpass.getpass('password: ')
    if username == 'bob' and password == '123456':
        print 'Login successful'
    else:
        print 'Login incorrect'

测试脚本执行:

[root@py01 bin]# ./login2.py
    username: bob
    password: 123456               #此处所填写的密码将不在屏幕上显示
    Login successful

附加:我自己的方法

x={'name1':'bob','passwd1':'123456','name2':'lisi','passwd2':'3652'}  
a=raw_input("请输入用户名:")
b=raw_input("请输入密码:")
if (a==x['name1'] and b==x['passwd1']) :
    print "Login successful"
elif (a==x['name2'] and b==x['passwd2']) :
    print "Login successful"
else:
    print "Login incorrect"

三、编写判断成绩的程

目标:

编写score.py脚本,根据用户输入的成绩分档,要求如下:

  • 如果成绩大分60分,输出“及格”
  • 如果成绩大于70分,输出“良”
  • 如果成绩大于80分,输出“好”
  • 如果成绩大于90分,输出“优秀”
  • 否则输出“你要努力了”

方案:

本题需要注意的是逻辑顺序。在多分支的if语句中,自顶向下逐步匹配,一旦匹配则执行相应的子语句,其他语句将不再执行。

因此,在编写代码时要注意逻辑,成绩是100分也大于60分,如果把判断较小分数的语句写在前面,那么是凡大于60分的成绩都是输出“及格”,那么只有第一个判断语句会执行,所以应该把分值更高的判断写在上面。

步骤:

步骤一:编写脚本

[root@py01 bin]# vim score.py
    #!/usr/bin/env python
    #coding: utf8                               #为了程序可以支持中文,指定UTF8编码
    score = int(raw_input('enter score: '))
    if score > 90:
        print '优秀'
    elif score > 80:
        print '好'
    elif score > 70:
        print '良'
    elif score > 60:
        print '及格'
    else:
        print '你要努力了!'

步骤二:测试脚本执行

[root@py01 bin]# ./score.py
    enter score: 59
    你要努力了!
    [root@py01 bin]# ./score.py
    enter score: 88
    好

附加:python版本的猜数字

#猜数字游戏
import random
X=random.randint(1,10)
#第一次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()        //如果猜对了,就退出脚本,这样才是合理的
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

#第二次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

#第三次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

....       //还可以增加更多,直接复制上面的一段代码就行,注意不要把random那一行复制了(随机数变化)

附加:

1> 看第一段代码,了解python代码的格式

#!/usr/bin/python
#coding:utf-8 #计算一个1+2+3+4+...+100数列的总和
i=1;sum=0
while i<=100:
sum+=i
i+=1
print '总和是:',sum #这里print顶格写就是在循环外面,否则在循环里面
print '总和是:%d'%sum #这里的%d是占位符,会把外面的数套用进去,%d是整形10进制,%s是字符串,注意这里格式

2> 看第二段代码,了解while循环的用法

#!/usr/bin/python
#coding:utf-8
'''这是一个模块,这个i模块没用'''    #三引号也可以用来做注释,并且支持回车换行

#猜数字游戏
import random
X=random.randint(1,10)
#第一次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

#第二次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

#第三次猜数
Y=int(raw_input("请输入你的数字:"))
if Y==X:
    print "恭喜你猜对了"
    exit()
elif Y > X:
    print "很遗憾,你猜大了"
else:
    print "很遗憾,你猜小了"

#上面的猜数字可以做成死循环,直到猜出正确数字才会退出
import random
num=random.randint(1,100)
while True:
    cai=int(raw_input("请输入数字:"))
    if cai==num:
        print "恭喜你,猜对了"
        exit()
    elif cai>num:
        print "真遗憾,你猜大了"
    else:
        print "真遗憾,你猜小了"

3> 看第三段代码,了解break和continue的用法

#!/usr/bin/python
#coding:utf-8

i=0
while i<5:
    i+=1
    if i==3:
        break     #break中断后退出整个循环
    print i      #print没有与while缩进一致,所以时在循环里面打印
print i      #print与while缩进一致,所以时在循环外面打印

i=0
while i<5:
    i+=1
    if i==3:
        continue   #continue中断后返回执行循环的下一条
    print i

备注1:

 Python——Shell编程关于Sha-Bang(#!)
Q. #!的名字为什么叫Sha-Bang?
A. Sha-Bang是Sharp和Bang的组合词。Sharp for #, Bang for ! 类似的情况是,C#通常被称为C Sharp
Q. Sha-Bang(#!)是不是注释?
A. 不是注释。Sha-Bang(#!)所在行的作用是告知该脚本使用的是哪种命令解释器,并不是可有可无的。虽然很多情况下省略了Sha-Bang(#!)仍然能够运行脚本,这是由于系统在这种情况下是默认使用了当前命令行解释器的
Q. Sha-Bang(#!)的编写有什么规范?
A. Sha-Bang(#!)应该位于脚本的第一行,并且顶格填写,否则都是错的,即使Sha-Bang之前的内容都是注释,这种错误是常见的,而且不易发现的,因为此时Sha-Bang(#!)所在行实际上是不起效的,系统使用了默认的命令行解释器
Q. Sha-Bang(#!)在同一个脚本中可以出现几次?
A. 只有第一行的Sha-Bang(#!)会生效,其余的会视为注释
Q. 为什么推荐这种写法:#!/bin/env perl?
A. 因为这是有利于移植脚本到其它平台的写法,解释器的默认安装路径在各个操作系统是不太一样的,有的是/bin/,有的是/usr/bin/,甚至有可能是用户自定义的路径,使用env就基本上能够通用了。虽然env也有可能在/bin/或者/usr/bin/中,但通常的情况是在这两个路径下都有env,或者其中一个是另一个的符号链接
最后提醒一下,有时候设定的cronjob异常,但是命令行能够执行成功,请先检查一下Sha-Bang(#!)是否合法,然后检查是否缺少了必须的环境变量,命令行能够执行成功可能是利用了默认的命令行解释器和环境变量。

Python基础(一):程序输入输出、判断合法用户、编写判断成绩的程序的更多相关文章

  1. python基础教程 变量/输入输出/if判断

    python的运用越来越多.大数据经常被人谈及,数据从何而来?通过各个平台.app.网站数据的收集,分析,过滤,生成报告,这些都可以用python来处理,并且有很多成熟的库可以直接用了.那还不赶紧深入 ...

  2. Python基础 整形、布尔值、if条件判断、while循环、运算符、格式化输出

    1,计算机基础.2,python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码.3,python ...

  3. 一、python基础笔记(输入输出、list、touple、dict、set)

    1.python 环境搭建  http://www.w3cschool.cc/python/python-install.html 2.python输入输出 print 'The quick brow ...

  4. 第二章(1.3)Python基础知识(输入输出)

    一.?输出 用print加上字符串,就可以向屏幕上输出指定的文字 print?'hello, world' print也可以打印整数. >>> print?300 二.?输入 Pyt ...

  5. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  6. Python 入门之Python基础知识

    Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...

  7. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  8. 编写优质嵌入式C程序

    前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...

  9. 编写优质嵌入式C程序(转)

    前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...

随机推荐

  1. 【Dart学习】--Dart之超级父类之Object

    一,概述 -- Object Dart语言和Java一样,都是面向对象语言,所有的类也都有个公共的父类----->Object.该类位于Dart sdk核心库core目录下. 二,构造方法 // ...

  2. dumpsys, traceView调试命令

    1. dumpsys dumpsys cpuinfo: 打印cpu使用情况: dumpsys meminfo: 打印内存使用率情况: dumpsys activity: 打印所有活动的信息: dump ...

  3. Python读取文件时出现UnicodeDecodeError 'gbk' codec can't decode byte 0x80 in position x

    Python在读取文件时 with open('article.txt') as f: # 打开新的文本 text_new = f.read() # 读取文本数据出现错误: UnicodeDecode ...

  4. js获取URL地址的参数

    function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  5. Digit

    Digit Accepted : 85   Submit : 308 Time Limit : 1000 MS   Memory Limit : 65536 KB  题目描述 我们把十进制整数依次写成 ...

  6. BUUCTF | CODE REVIEW 1 (反序列化,md5绕过)

    <?php /** * Created by PhpStorm. * User: jinzhao * Date: 2019/10/6 * Time: 8:04 PM */ highlight_f ...

  7. php使用curl实现get和post请求的方法,数据传输urldecode和json

    PHP支持CURL库,利用URL语法规定来传输文件和数据的工具,支持很多协议,包括HTTP.FTP.TELNET等. 优点:是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS.CURL ...

  8. 建站手册-浏览器信息:苹果 Safari 浏览器

    ylbtech-建站手册-浏览器信息:苹果 Safari 浏览器 1.返回顶部 1. http://www.w3school.com.cn/browsers/browsers_safari.asp 2 ...

  9. Elasticsearch后台运行步骤

    Elasticsearch后台运行步骤 1.cmd 到elasticsearch 中bin目录下 2.elasticsearch-service 出现  3.安装服务 elasticsearch-se ...

  10. Java数据访问对象模式

    数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分离. 以下是数据访问对象模式的参与者. 数据访问对象接口 - 此接口定义要对模型对象执行的标准操作. 数据访问对象具体类 - ...