【100天构建100个Python项目成为实战专家】第二天 数据类型,数字,运算符,类型转换,F 字符串

本文是关于Python编程的学习教程,介绍了基本数据类型,包括字符串、整数、浮点数和布尔值,以及如何进行类型转换。通过代码挑战,讲解了数学运算、类型错误处理和F字符串的使用,帮助读者巩固数据类型和运算的理解。
摘要由CSDN通过智能技术生成

这节课的项目是小费计算器。

1 基本数据类型

上个教程我们学习了使用len()函数计算字符串的长度,比如我们输入print(len("hello")),运行之后输出的长度是5,如果我们在len()函数中输入一个数字会怎么样呢,print(len(12345)),当你运行这个语句的时候,控制台中就会输出一串错误描述, TypeError: object of type 'int' has no len(),为了理解这些错误是怎么造成的,我们首先要了解数据类型。第一天的时候我们已经学习了字符串类型,今天我们将探索其他的数据类型:String(字符串)、Integer(整数)、Float(浮点数)、Boolean(布尔值)。

1.1 String 字符串

我们已经学习了字符串,字符串就是由一堆字符组成的,例如:"Hello"这个单词是由5个字符组成的,我们可以取出这个单次的每个字符,我们只需要在"hello"这个字符串后面添加一对中括号,然后填入想要获取的字符的位置编号即可,例如:我们获取"hello"的第一个字符,我们可以这样写,"hello"[0]。使用print("hello"[0])就可以输出这个字符。在Python中序列的编号都是从0开始的,所以字符串第一个字符的编号就是0。如果我们将数字123作为字符串怎么处理呢,直接用双引号将数字123括起来就行了,"123",这样如果我们想要获取字符"3",就可以通过"123"[2]。如果我们输出print("123" +"456"),这个时候程序会直接将这两个字符串拼接在一起,"123456"。如果你想让123和456进行相加,你需要将这两个数字定义成整数类型。

1.2 Integer 整数

下面这个语句就会输出123和456的和,print(123 + 456)。有时候数字过长,我们会在数字中间插入逗号来将数字分隔开,方便理解数字,例如123456789可以写成123,456,789,在Python中你可以用类似的表示法来定义一个数字变量,只需要使用下划线替代逗号即可,123_456_789,计算机在运行代码的时候,会将下划线忽略掉,好处只是让我们能够更轻松的阅读数字。无论是正数还是负数在编程中都被称为Integer(整数)。那么小数我们怎么称呼呢?小数在编程中被称为Float(浮点数)。

1.3 Float 浮点数

例如π就是一个浮点数,它的值近似3.14159。

1.4 Boolean 布尔值

布尔值只有两个可能的值:True,False。这个数据类型在编程中被大量使用。

现在你已经看到了许多基本的数据类型,字符串、整数、浮点数、布尔值,下一节的测验看看你是否已经把这些知识编程你自己的了。

2 类型错误、类型检查和类型转换

之前我们在使用len()函数的时候遇到了一个类型错误提示,当我们尝试将数字12345放入len()函数中的时候,len(12345),运行之后你就会看到错误提示TypeError: object of type 'int' has no len(),下面我们来学习一点类型和函数有关的内容。函数就像一个处理特定东西的机器,当你放入正确的东西的时候,它就会正常产生对应的处理结果,当你放入错误的东西的时候,这个机器就会出现异常。在这里,我们将错误的数据类型变量放入了len()函数,所以产生了异常。在我们之前的代码挑战的时候,我们使用过len()函数计算名字。

num_char = len(input("What is your name?"))
print("Your name has " + num_char + " characters.")

我们运行上面这段代码的时候,会出现如下的错误 TypeError: can only concatenate str (not "int") to str,这个错误提示告诉我们只能使用字符串才能和字符串进行拼接,num_char是一个整数类型。那么我们怎样才能防止出现这类错误,怎么才能查看这些变量的数据类型呢?我们可以使用type()函数,这个函数会返回变量的数据类型。

print(type(num_char))

'''
<class 'int'>
'''

运行上面这段代码,就会输出num_char的数据类型是int。为了让num_char能和字符串进行拼接,我们需要将num_char的数据类型进行转换。我们可以使用str()函数,这个函数会将变量转换成字符串类型,所以我们可以将num_char变量传入str()函数中。

print("Your name has " + str(num_char) + " characters.")

类似的,我们可以使用float()函数将变量转化成浮点数。

a = 123
print(type(a))
a = float(123)
print(type(a))

'''
<class 'int'>
<class 'float'>
'''

3 数据类型练习

写一个程序,将一个两位数的整数每一位相加,例如:如果输入的数字是35,输出的结果应该是8,因为3 +5 = 8。

样例输入

39

样例输出

12

解释

3 + 9 = 12

解答

 首先我们来获取一个两位数:

two_digit_number = input("输入一个两位数:")

这个时候我们查看一下two_digit_number的数据类型:

print(type(two_digit_number))

从type()函数返回的结果我们知道two_digit_number的数据类型是字符串,所以我们可以按照编号获取字符串中的每个字符,下面我们从two_digit_number中获取这个两位数的每一位数字:

number_1 = two_digit_number[0]
number_2 = two_digit_number[1]

然后我们查看一下number_1和number_2的数据类型:

print(type(number_1))
print(type(number_2))

 运行上面这段代码我们知道,number_1和number_2的数据类型是字符串,为了计算这两个数字的和,我们需要将这两个变量的数据类型改为整数:

number_1 = int(two_digit_number[0])
number_2 = int(two_digit_number[1])

 下面是完整的代码:

two_digit_number = input("输入一个两位数:")
number_1 = int(two_digit_number[0])
number_2 = int(two_digit_number[1])
print(number_1 + number_2)

如果你在完成这个代码挑战的过程中遇到任何问题,看一下之前的教程内容,然后再来进行这个代码挑战,你会得到很大的提升。

4 数学运算符

在上一个代码挑战中,你已经使用了加号(+)来计算两个数字之和,两数相减使用(-),相乘使用星号(*),两数相除使用(/)。

print(7 + 3)
print(7 - 3)
print(7 * 3)
print(7 / 3)

 如果要计算一个输的N次方可以使用两个连接在一起的星号计算(**):

2 ** 2 # 2的2次方
8 ** 10 # 8的10次方

在数学中,运算符是有优先级顺序的,Python中每个算数运算符的优先级顺序如下:

()

**

* /

+ -

根据上面的算数运算符,你就可以知道下面这个算术表达式的计算过程和结果了:

print(3 * 3 + 3 / 3 - 3)

这个算数表达式的计算过程是:

3 * 3 = 9

3 / 3 = 1.0

9 + 1.0 = 10.0

10.0 - 3 = 7.0

你可以使用括号改变计算的优先级顺序,例如你想先计算3 + 3,你可以这么写:3 * (3 + 3)/ 3 - 3。

5 代码挑战:身体质量指数计算器

写一个程序,通过用户输入的提供和身高,计算身体质量指数。

身体质量指数(BMI)是由一个人的质量(体重)和身高计算出的一个数值,公式如下。

BMI = \frac{weight (kg)}{height^{2} (m^{2})}

例如,一个身高高的人和一个身高矮的人有相同的体重,身高矮的人通常体重过高。

注意:计算结果需要进行四舍五入。

样例输入

weight = 80

height = 1.75

样例输出

26

解释

80 / (1.75 * 1.75) = 26.122448979591837

解答

首先我们要获取用户的身高和体重,我们可以使用input()函数来获取这两个值,因为input()函数的返回值是字符串,我们要进行算数运算,需要将字符串类型转换成整数或者浮点数,在这里我们将身高和体重的数据类型都转换成float。

height = float(input("输入你的身高(米):"))
weight = float(input("输入你的体重(千克):"))

 根据公式,我们需要使用体重除以身高的平方,计算一个数字的平方我们可以使用运算符*。 

bmi = weight / (height ** 2)

int()函数可以获取一个小数的整数部分,为了将结果四舍五入,我们将结果加上0.5,然后使用int()函数取整即可,你可以思考一下为什么这么做?下面是这个代码挑战完整的代码。 

height = float(input("输入你的身高(米):"))
weight = float(input("输入你的体重(千克):"))
bmi = weight / (height ** 2)
print(int(bmi + 0.5))

6 数字操作和F字符串 

上个代码挑战我们需要将一个小数进行四舍五入,我们使用的方法是先将小数加上0.5,然后使用int()函数取整,其实在Python中使用round()函数即可完成相同的操作。

print(round(8 / 3))

这个函数还可以传入第二个参数,来指定保留小数的位数,例如,保留2位小数:

print(8 / 3, 2)

当我们进行计算两个数相除的时候,使用type()函数查看计算结果你就会看到返回的float类型,即使是4 / 2,返回的也是2.0。我们也可以使用两个除号只获取整数部分:

print(4 / 2)
print(4 // 2)

‘’‘
2.0
2
’‘’

另外我们还有组合运算符,例如我们定义了一个变量a,将4赋值给变量a,然后将a除以2,并将结果再保存到变量a中,我们可以这样写:

a = 4
a = a / 2

使用组合运算符这样写:

a = 4
a /= 2

其他的组合运算符有:+=、-=、*=

 如果我们想要执行如下的语句:

score = 0
print("your score is " + score)

会出现类型错误,字符串不能和数字拼接在一起,需要将score转换为字符串类型:

score = 0
print("your score is " + str(score))

如果只拼接一个变量还好,但是如果我们有多个不同类型的变量和字符串拼接,就会非常痛苦。

score = 0
height = 1.8
isWinning = True
print("your score is " + str(score))

在Python中有一个非常方便的方法将不同类型的变量插入字符串中。

score = 0
height = 1.8
isWinning = True
print(f"your score is {score}, your height is {height}, your winning is {isWinning}")

7 代码挑战:人生苦短

写一个程序,使用数学运算和F字符串计算到90岁之前你还剩多少天、周、月。

输入你当前的年龄,按照如下格式输出结果:

你还剩 x 天,y 周,和 z 月。

注意:你需要将小数四舍五入。

提示:在这个代码挑战中,假设,1年=365天,1年52周,1年=12月。

样例输入

56

样例输出

你还剩 12410 天,1768 周,和 408 月。

解释

90 - 56 = 34

34 * 365 = 12410

34 * 52 = 1768

34 * 12 = 408

解答

age = int(input("你当前的年龄是多少?"))
rest_year = 90 - age
age_as_day = rest_year * 365
age_as_week = rest_year * 52
age_as_month = rest_year * 12
print(f"你还剩 {age_as_day} 天,{age_as_week} 周,和 {age_as_month} 月。")

8 小费计算器

写一个程序,实现账单计算器,计算根据输入,计算每个人应支付多少钱?

print("欢迎来到小费计算器!")
total_bill = float(input("总账单是多少?"))
percentage_tip = int(input("想要给百分之多少的小费?10,12或者15?"))
people = int(input("多少人分担账单?"))
result = round(total_bill * (1 + percentage_tip / 100) / people, 2)
print(f"每个人应支付:{result}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JKooll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值