Python | 平均绩点
-
字符串的概念和特点
字符串既可以使用单引号''
,也可以使用双引号""
来创建
可以使用+
运算符来拼接字符串,并返回字符串拼接后的结果。
first_name = "Tom"
last_name = "Jerry"
full_name = first_name + " " + "and" + " " + last_name
# full_name 现在是 Tom and Jerry
-
字符串的创建、索引、元素的访问以及遍历操作
索引、for循环遍历、切片获取子字符串(切片后会返回新字符串,需要一个变量来接受)
-
字符串的常用方法
len()、split()
join(): 将列表中的字符串连接成一个新的字符串,你可以指定连接符号,比如下面的示例。
persons = ["tom", "jerry", "mike"]
text = " ".join(persons)
#将列表中的字符串以空格连接在一起,相当于split的反向操作。"tom jerry mike"
replace(): 用于替换字符串中的指定子字符串。
str1 = "Hello, world!"
str2 = str1.replace("World", "Python")
-
格式化字符串
在Python中,整数相除会得到浮点数结果,即使结果是一个整数,也会以浮点数的形式表示。(如果用//呢?)
想要在Python中输出保留两位小数的数字,可以使用format()
方法, format()
方法通常用于字符串中的占位符替换,占位符通常用花括号 {}
表示。你可以将占位符插入到字符串中,然后使用 format()
方法来将实际值插入这些占位符。
number = 3.1415926
# {}是一个占位符,输出结果时会将format()参数里的内容替换在{}中,:.2f 表示保留两位小数
formatted_number = "{:.2f}".format(number)
print(formatted_number)
为什么要用双引号“{ }”呢?是因为变量类型是字符串?还是只有语法的要求?
-
flag
编程思想
当循环遇到{A, B, C, D, F}
以及空格之外的字符时,会输出"Unknown"
, 然后退出for循环
的执行,但是仍然会执行循环之后的语句,即print
语句,实际上,这行代码不应该被执行,应该怎样做才能避免这行代码的执行呢?
我们知道if(条件)
可以控制语句的执行,当条件为真的时候,if
结构体中的代码可以执行,条件为假的时候则不用执行,所以我们可以联想到下面的形式:
if condition:print("{:.2f}".format(sum_grade / count))
也就是说,我们可以采用这样一种思路,事先给每一行字符串一个“真的令牌”,字符串遍历处理过程中,如果有哪一行字符串中有{A, B, C, D, F}
以及空格之外的字符,则把“真令牌”替换成“假令牌”,这样当走出循环之后再进行输出处理时,就会因为不认识这个“假令牌”而不进行输出。
字符串的格式化输出
- 使用
%
操作符进行格式化
name = "张三"
age = 20formatted_string = "姓名:%s, 年龄:%d " % (name, age)
print(formatted_string)
使用%
会将后面的变量name, age
一一对应插入到对应的占位符上,其中%s
表示字符串,%d
表示整数, %f
表示浮点数。
- 字符串
format()
方法
name = "张三"
age = 20formatted_string = "姓名:{}, 年龄:{}".format(name, age)
print(formatted_string)
format()
方法允许使用占位符{}
来插入值,并使用format()
方法的参数来提供要插入的值,和上面的操作符很类似。
f-字符串
以f
开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。
name = "张三"
age = 20formatted_string = f"姓名: {name},年龄:{age}"
print(formatted_string)
while True:try:s = input()score = 0count = 0# flag = 1for c in s:flag = 1# count += 1if c == "A":score += 4count += 1elif c == "B":score += 3count += 1elif c == "C":score += 2count += 1elif c == "D":score += 1count += 1elif c == "F":score += 0count += 1elif c == " ":continueelse:flag = 0print("Unknown")breakif flag:print("{:.2f}".format(score/count))except:break