每段故事都有一篇剧情,每段爱情都有动人旋律,——歌曲《是非题》
控制流,就像是是非题,对的会通过,错的会越过,每段代码最终都会面临一个选择,结果将流向何方,由你来控制。和人生不同的是,错了,我们可以重来。
问题:输入考试成绩,如果成绩60分以下不及格,60分以上及格,80分以上中等,90分以上优秀,
s = input("请输入考试成绩:")
if s<60:
print("你没及格,要挨揍了")
if s>=60:
print("你及格了,但是还会挨揍")
if s>=80:
print("小伙子不错,你已经超过了好多人")
if s>=90:
print("优秀,继续保持")
下面开始测试代码,首先输入一个字符,
请输入考试成绩:65
Traceback (most recent call last):
File "D:/Users/Desktop/test.py", line 4, in <module>
if s<60:
TypeError: '<' not supported between instances of 'str' and 'int'
出错了,看看错误说明,<这个符号无法用在str类型和int类型之间,对了我们input接收进来的变量都是字符串类型,怎么办转换一下。
s = int(input("请输入考试成绩:"))
#s=int(s) 这里是python的单行注释,默认不会执行
if s<60:
print("你没及格,要挨揍了")
if s>=60:
print("你及格了,但是还会挨揍")
if s>=80:
print("小伙子不错,你已经超过了好多人")
if s>=90:
print("优秀,继续保持")
我们可以直接在,input上添加int函数,用于把字符串类型转换为str类型,或者再重新给s赋值。
继续测试一下:
请输入考试成绩:55
你没及格,要挨揍了
请输入考试成绩:65
你及格了,但是还会挨揍
请输入考试成绩:70
你及格了,但是还会挨揍
请输入考试成绩:85
你及格了,但是还会挨揍
小伙子不错,你已经超过了好多人
请输入考试成绩:95
你及格了,但是还会挨揍
小伙子不错,你已经超过了好多人
优秀,继续保持
请输入考试成绩:-50
你没及格,要挨揍了
请输入考试成绩:abcd
Traceback (most recent call last):
File "D:/Users/Desktop/test.py", line 2, in <module>
s = int(input("请输入考试成绩:"))
ValueError: invalid literal for int() with base 10: 'abcd'
前面还算正常,后面几个测试,程序就不受控制了,最后还崩了。因为if是无论上一个判断,成功与否,都会继续下一个判断,所以当我们的分数从大于等于80开始,满足了越来越多的判断,到了90以上,几乎满足了所有的判断,想让程序正常,我们必须约束判断范围。最后,用户输入-50居然也可以,如果用户输入的是无法转换成数字的字符串呢?程序就崩溃了,我们来一一解决。
第一次修改:约束判断范围
s = int(input("请输入考试成绩:"))
#s=int(s)
if s<60 and s>=0:
print("你没及格,要挨揍了")
if s>=60 and s< 80:
print("你及格了,但是还会挨揍")
if s>=80 and s<90:
print("小伙子不错,你已经超过了好多人")
if s>=90 and s<100:
print("优秀,继续保持")
如果用户输入正常的分数,都能有效反应,但是如果输入大于100或者小于0的数字,程序就毫无反应,我们需要提供给用户一个提示。加个else怎么样,我们来试一试。
s = int(input("请输入考试成绩:"))
#s=int(s)
if s<60 and s>=0:
print("你没及格,要挨揍了")
if s>=60 and s< 80:
print("你及格了,但是还会挨揍")
if s>=80 and s<90:
print("小伙子不错,你已经超过了好多人")
if s>=90 and s<=100:
print("优秀,继续保持")
else:
print("请输入正确的分数")
这一次满足了一切正常的情况,而且也能处理不正确的分数,但是还是无法控制用户输入,无法转换为int类型的字符串,很明显我们还是需要再加一个判断,判断字符串是不是都由数字组成。
str.isalnum()
如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回 True ,否则返回 False 。
如果 c.isalpha() ,c.isdecimal() ,c.isdigit() ,或 c.isnumeric() 之中有一个返回
True ,则字符 “c“是字母或数字。
str.isalpha()
如果字符串中的所有字符都是字母,并且至少有一个字符,返回 True ,否则返回 False 。字母
字符是指那些在 Unicode 字符数据库中定义为”Letter” 的字符,即那些具有”Lm”、”Lt”、”Lu”、”Ll”
或”Lo” 之一的通用类别属性的字符。注意,这与 Unicode 标准中定义的” 字母” 属性不同。
str.isascii()
如果字符串为空或字符串中的所有字符都是 ASCII ,返回 True ,否则返回 False 。ASCII 字符
的码点范围是 U+0000-U+007F 。
3.7 新版功能.
str.isdecimal()
如果字符串中的所有字符都是十进制字符且该字符串至少有一个字符,则返回 True ,否则返回
False 。十进制字符指那些可以用来组成 10 进制数字的字符,例如 U+0660 ,即阿拉伯字母数字
0 。严格地讲,十进制字符是 Unicode 通用类别”Nd” 中的一个字符。
str.isdigit()
如果字符串中的所有字符都是数字,并且至少有一个字符,返回 True ,否则返回 False 。数字包
括十进制字符和需要特殊处理的数字,如兼容性上标数字。这包括了不能用来组成 10 进制数的数
字,如 Kharosthi 数。严格地讲,数字是指属性值为 Numeric_Type=Digit 或 Numeric_Type=Decimal
的字符。
str.isidentifier()
如果字符串是有效的标识符,返回 True ,依据语言定义,identifiers 节。
调用keyword.iskeyword() 来检测字符串 s 是否为保留标识符,例如 def 和 class。
str.islower()
如果字符串中至少有一个区分大小写的字符 4 且此类字符均为小写则返回 True ,否则返回 False
。
str.isnumeric()
如果字符串中至少有一个字符且所有字符均为数值字符则返回 True ,否则返回 False 。数
值字符包括数字字符,以及所有在 Unicode 中设置了数值特性属性的字符,例如 U+2155, VUL-
GAR FRACTION ONE FIFTH。正式的定义为:数值字符就是具有特征属性值 Numeric_Type=Digit,
Numeric_Type=Decimal 或 Numeric_Type=Numeric 的字符。
str.isprintable()
如果字符串中所有字符均为可打印字符或字符串为空则返回 True ,否则返回 False 。不可打印
字符是在 Unicode 字符数据库中被定义为”Other” 或”Separator” 的字符,例外情况是 ASCII 空格字符
(0x20) 被视作可打印字符。(请注意在此语境下可打印字符是指当对一个字符串发起调用repr()
时不必被转义的字符。它们与字符串写入sys.stdout 或sys.stderr 时所需的处理无关。)
str.isspace()
如果字符串中只有空白字符且至少有一个字符则返回 True ,否则返回 False 。
空白字符是指在 Unicode 字符数据库 (参见unicodedata) 中主要类别为 Zs (”Separator, space”) 或
所属双向类为 WS, B 或 S 的字符。
str.istitle()
如果字符串中至少有一个字符且为标题字符串则返回 True ,例如大写字符之后只能带非大写字符
而小写字符必须有大写字符打头。否则返回 False 。
str.isupper()
如果字符串中至少有一个区分大小写的字符 4 且此类字符均为大写则返回 True ,否则返回 False
以上是python基本库,给我们用来判断字符串对象组成的各种方法,前面的str代表了字符串对象,也就是,我们程序中的变量s,找一找我们该用哪一个函数。
一下三个进入了我们的视线,貌似都满足我们的要求,我们来测试一下:
str.isdecimal()
如果字符串中的所有字符都是十进制字符且该字符串至少有一个字符,则返回 True ,否则返回
False 。十进制字符指那些可以用来组成 10 进制数字的字符,例如 U+0660 ,即阿拉伯字母数字
0 。严格地讲,十进制字符是 Unicode 通用类别”Nd” 中的一个字符。
str.isdigit()
如果字符串中的所有字符都是数字,并且至少有一个字符,返回 True ,否则返回 False 。数字包
括十进制字符和需要特殊处理的数字,如兼容性上标数字。这包括了不能用来组成 10 进制数的数
字,如 Kharosthi 数。严格地讲,数字是指属性值为 Numeric_Type=Digit 或 Numeric_Type=Decimal
的字符
str.isnumeric()
如果字符串中至少有一个字符且所有字符均为数值字符则返回 True ,否则返回 False 。数
值字符包括数字字符,以及所有在 Unicode 中设置了数值特性属性的字符,例如 U+2155, VUL-
GAR FRACTION ONE FIFTH。正式的定义为:数值字符就是具有特征属性值 Numeric_Type=Digit,
Numeric_Type=Decimal 或 Numeric_Type=Numeric 的字符。
>>> a="60"
>>> print(a.isdecimal(),a.isdigit(),a.isnumeric())