Python基础(一):程序输入输出、判断合法用户、编写判断成绩的程序
一、程序输入输出
目标:
编写login.py脚本,实现以下目标:
- 提示用户输入用户名
- 将用户名保存在变量中
- 在屏幕上显示欢迎用户的信息
方案:
编写程序时,很多情况下都需要程序与用户交互。在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基础(一):程序输入输出、判断合法用户、编写判断成绩的程序的更多相关文章
- python基础教程 变量/输入输出/if判断
python的运用越来越多.大数据经常被人谈及,数据从何而来?通过各个平台.app.网站数据的收集,分析,过滤,生成报告,这些都可以用python来处理,并且有很多成熟的库可以直接用了.那还不赶紧深入 ...
- Python基础 整形、布尔值、if条件判断、while循环、运算符、格式化输出
1,计算机基础.2,python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码.3,python ...
- 一、python基础笔记(输入输出、list、touple、dict、set)
1.python 环境搭建 http://www.w3cschool.cc/python/python-install.html 2.python输入输出 print 'The quick brow ...
- 第二章(1.3)Python基础知识(输入输出)
一.?输出 用print加上字符串,就可以向屏幕上输出指定的文字 print?'hello, world' print也可以打印整数. >>> print?300 二.?输入 Pyt ...
- Python之路3【第一篇】Python基础
本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...
- Python 入门之Python基础知识
Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- 编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...
- 编写优质嵌入式C程序(转)
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...
随机推荐
- Java总结第二期
大家好,我又来了!!啦啦,我知道你们很想我,很想我赶快写更多的文章来提高自己的水平,好吧,我就从了你们.下面跟我一起来光顾Java第二期,掌声,掌声!!! 第二章: 这章,我要给大家讲得内容有变量,常 ...
- webbench(web性能压力测试工具)
在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力测试的结果 ...
- cannot access Input/output error
ls: cannot access Input/output errorls: cannot open directory .: Input/output error 硬盘故障,只读或只写,你可以d ...
- Codeforces 510C (拓扑排序)
原题:http://codeforces.com/problemset/problem/510/C C. Fox And Names time limit per test:2 seconds mem ...
- css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙
css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙 5 样式 .ceshi{float:left; margin-left:13px; width:180px; ...
- error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...
- Sublime Text 3 快捷键总结(Mac)
Command + Shift + L 光标同时定位多行 Command + Enter 在下一行插入新行.举个栗子:即使光标不在行尾,也能快速向下插入一行.
- XAMPP【phpmyadmin】外网访问被拒绝解决办法
问题场景: 在阿里云搭建一个apache服务器,正常访问XAMPP目录下的页面. 服务器本地是可以正常访问的 但是远程 就不可以访问了: 出现这样的画面: 解决方法 1.按照提示找到httpd-xam ...
- dubbo远程服务调用和maven依赖的区别
dubbo:跨系统通信.比如:两个系统,一个系统A作客户端,一个系统B作服务器, 服务器B把自己的接口定义提供给客户端A,客户端A将接口定义在spring中的bean.客户端A可直接使用这个bean, ...
- 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa
上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...