WEBKT

Python 字符串与数字转换的艺术:从入门到精通

31 0 0 0

1. 为什么要进行字符串和数字的转换?

2. 字符串转数字:int() 和 float()

2.1. int():字符串到整数的“传送门”

2.2. float():字符串到浮点数的“任意门”

2.3 处理包含千位分隔符的字符串

2.4 处理包含正负号的字符串

3. 数字转字符串:str()、格式化字符串、format() 方法

3.1. str():数字到字符串的“直通车”

3.2. 格式化字符串 (f-string):让你的输出更“靓”

3.3. format() 方法:另一种格式化字符串的“姿势”

3.4 round()函数控制浮点数精度

4. 进阶技巧:处理更复杂的字符串格式

4.1 包含货币符号、百分号的字符串

4.2 科学计数法表示的字符串

4.3 包含空格或其他特殊字符的字符串

4.4 使用 locale 模块(处理不同区域设置)

5. 常见错误和陷阱

6. 总结

各位好,我是你们的“赛博老中医”,今天咱们来聊聊 Python 里一个看似简单,实则暗藏玄机的话题——字符串和数字之间的“乾坤大挪移”。别看这只是个类型转换的小把戏,用好了能让你在数据处理、格式化输出、甚至是算法优化上事半功倍。咱们今天就来好好盘盘这个道道,保证让你从“小白”变“大神”!

1. 为什么要进行字符串和数字的转换?

在 Python 的世界里,数据类型就像是不同的“物种”,各有各的脾气。字符串 (str) 就像是“文本”,而数字 (int, float) 则是“数值”。它们之间泾渭分明,但有时候,我们又需要它们“跨界合作”。

想象一下,你从用户那里接收到一个输入,是一个表示年龄的字符串 '25'。如果你想拿这个年龄去做计算,比如判断是否成年,直接拿字符串去比较大小可不行。这时候,你就需要把它转换成数字 25。

反过来,如果你想把一个计算结果,比如平均分 92.5,显示给用户看,或者保存到文件里,你就得把它转换成字符串 '92.5'。

所以,字符串和数字的转换,就像是 Python 世界里的“翻译官”,负责在不同的数据类型之间搭起桥梁,让它们能够和谐共处,发挥各自的特长。

2. 字符串转数字:int()float()

Python 提供了两个内置函数,int()float(),专门负责把字符串转换成数字。它们就像是两个“加工厂”,int() 负责生产“整数”,float() 负责生产“浮点数”(也就是带小数点的数)。

2.1. int():字符串到整数的“传送门”

int() 函数可以将一个符合整数格式的字符串转换成整数。用法很简单,就像这样:

string_number = '123'
integer_number = int(string_number)
print(integer_number) # 输出:123
print(type(integer_number)) # 输出:<class 'int'>

看到了吧?原本是字符串类型的 '123',经过 int() 的“洗礼”,就变成了整数 123。type()函数可以查看数据类型。

注意事项:

  • int() 只能转换符合整数格式的字符串。如果字符串里有小数点、字母或者其他非数字字符,int() 会直接“罢工”,抛出一个 ValueError 异常。

    # 错误示例
    invalid_string = '123.45'
    # integer_number = int(invalid_string) # 报错:ValueError: invalid literal for int() with base 10: '123.45'
    invalid_string = '123a'
    #integer_number = int(invalid_string) #ValueError: invalid literal for int() with base 10: '123a'
  • int() 还可以指定进制。默认是十进制,但你也可以转换二进制、八进制、十六进制的字符串。

    binary_string = '101101'
    decimal_number = int(binary_string, 2) # 指定为二进制
    print(decimal_number) # 输出:45
    hex_string = '1A'
    decimal_number = int(hex_string, 16) # 指定为十六进制
    print(decimal_number) # 输出:26

2.2. float():字符串到浮点数的“任意门”

float() 函数比 int() 更“ উদার”,它不仅能转换整数格式的字符串,还能转换带小数点的字符串,也就是浮点数格式的字符串。

string_number = '123.45'
float_number = float(string_number)
print(float_number) # 输出:123.45
print(type(float_number)) # 输出:<class 'float'>

注意事项:

  • int() 一样,float() 也不能转换非数字格式的字符串。如果字符串里有字母或其他非数字、非小数点字符,float() 也会抛出 ValueError 异常。

    # 错误示例
    invalid_string = '123.45a'
    # float_number = float(invalid_string) # 报错:ValueError: could not convert string to float: '123.45a'

2.3 处理包含千位分隔符的字符串

有时候,我们会遇到包含千位分隔符的数字字符串,比如 '1,234,567'。直接用 int()float() 转换会出错。我们需要先去掉逗号。
最简单暴力的方法是用 replace() 函数:

string_number = '1,234,567'
string_number = string_number.replace(',', '')
integer_number = int(string_number)
print(integer_number) #1234567

更“优雅”一点的做法是使用 locale 模块,这个模块可以处理不同地区的数字格式。不过这有点“超纲”了,咱们后面再细说。

2.4 处理包含正负号的字符串

int()float() 都能正确处理包含正负号的字符串。

positive_string = '+123'
negative_string = '-456.7'
positive_int = int(positive_string)
negative_float = float(negative_string)
print(positive_int) # 输出:123
print(negative_float) # 输出:-456.7

3. 数字转字符串:str()、格式化字符串、format() 方法

把数字转换成字符串,Python 提供了更多的方法,除了最基本的 str() 函数,还有格式化字符串 (f-string) 和 format() 方法,它们可以让你的字符串输出更加“多姿多彩”。

3.1. str():数字到字符串的“直通车”

str() 函数是最简单直接的转换方法,它可以把任何数字(整数、浮点数)转换成对应的字符串。

integer_number = 123
float_number = 456.789
string_int = str(integer_number)
string_float = str(float_number)
print(string_int) # 输出:'123'
print(string_float) # 输出:'456.789'
print(type(string_int)) # <class 'str'>

3.2. 格式化字符串 (f-string):让你的输出更“靓”

f-string 是 Python 3.6 引入的新特性,它提供了一种更简洁、更易读的方式来格式化字符串。在字符串前面加上一个 fF,然后在字符串里用花括号 {} 包裹变量名或表达式,就可以把它们的值插入到字符串中。

name = 'Alice'
age = 30
# 使用 f-string
greeting = f'My name is {name} and I am {age} years old.'
print(greeting) # 输出:My name is Alice and I am 30 years old.

f-string 的强大之处在于,它不仅可以插入变量,还可以进行简单的计算、格式化输出。

price = 99.99
quantity = 5
# 计算总价并格式化输出
total = f'Total price: ${price * quantity:.2f}' # .2f 表示保留两位小数
print(total) # 输出:Total price: $499.95

3.3. format() 方法:另一种格式化字符串的“姿势”

format() 方法是另一种格式化字符串的方式,它比 f-string 稍微“老”一点,但功能也很强大。

name = 'Bob'
age = 25
# 使用 format() 方法
greeting = 'My name is {} and I am {} years old.'.format(name, age)
print(greeting) # 输出:My name is Bob and I am 25 years old.

format() 方法也可以指定格式:

pi = 3.1415926
# 保留三位小数
formatted_pi = 'Pi is approximately {:.3f}'.format(pi)
print(formatted_pi) # 输出:Pi is approximately 3.142

3.4 round()函数控制浮点数精度

round() 函数可以对浮点数进行四舍五入,然后再转换成字符串。

number = 3.1415926
# 保留两位小数
rounded_string = str(round(number, 2))
print(rounded_string) # 输出:'3.14'

4. 进阶技巧:处理更复杂的字符串格式

前面介绍的都是比较基本的转换方法。在实际应用中,我们可能会遇到更复杂的字符串格式,比如:

  • 包含货币符号、百分号的字符串
  • 科学计数法表示的字符串
  • 包含空格或其他特殊字符的字符串

这时候,我们就需要一些“进阶技巧”来处理。

4.1 包含货币符号、百分号的字符串

对于包含货币符号(如 '$'、'€')或百分号('%')的字符串,我们需要先去掉这些符号,然后再转换成数字。

# 包含货币符号
price_string = '$99.99'
price = float(price_string.replace('$', ''))
print(price) # 输出:99.99
# 包含百分号
discount_string = '20%'
discount = float(discount_string.replace('%', '')) / 100
print(discount) # 输出:0.2

4.2 科学计数法表示的字符串

对于科学计数法表示的字符串,比如 '1.23e+5',float() 函数可以直接转换。

scientific_string = '1.23e+5'
number = float(scientific_string)
print(number) # 输出:123000.0

4.3 包含空格或其他特殊字符的字符串

如果字符串中包含空格或其他特殊字符,我们需要先去掉这些字符,或者根据具体情况进行处理。

# 包含空格
number_string = ' 123 '
number = int(number_string.strip()) # 去掉首尾空格
print(number) # 输出:123

4.4 使用 locale 模块(处理不同区域设置)

locale模块的atoiatof具备自动处理千分符等能力。

import locale
# 设置区域为美国 (US)
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
# 包含千位分隔符的字符串
number_string = '1,234,567.89'
# 转换成整数
integer_number = locale.atoi(number_string)
print(integer_number) # 输出:1234567
# 转换成浮点数
float_number = locale.atof(number_string)
print(float_number) # 输出:1234567.89

注意:locale 模块的使用需要谨慎,因为它会影响程序的全局设置。如果你只需要处理特定格式的字符串,最好还是用 replace() 等方法手动处理。

5. 常见错误和陷阱

在进行字符串和数字转换时,有一些常见的错误和陷阱需要注意:

  • ValueError 异常:最常见的错误就是试图转换不符合格式的字符串。在转换之前,最好先检查字符串是否符合要求,或者使用 try...except 语句来捕获异常。

    string_number = 'abc'
    try:
    integer_number = int(string_number)
    except ValueError:
    print('Invalid number format')
  • 精度丢失:在进行浮点数转换时,可能会出现精度丢失的问题。这是由于计算机内部表示浮点数的机制导致的。如果需要高精度计算,可以使用 decimal 模块。

  • 隐式类型转换:Python 在某些情况下会进行隐式类型转换,比如在比较字符串和数字时。这可能会导致一些意想不到的结果。最好还是显式地进行类型转换,避免混淆。

6. 总结

好啦,关于 Python 字符串和数字转换的“秘籍”,今天就传授到这里。总结一下,咱们今天学习了:

  • 为什么要进行字符串和数字的转换
  • int()float() 函数的使用
  • str()、格式化字符串 (f-string) 和 format() 方法
  • 处理包含特殊字符的字符串
  • 常见错误和陷阱

掌握了这些,你就可以在 Python 的世界里自由地“穿梭”于字符串和数字之间,让你的代码更加灵活、高效。记住,实践出真知,多写代码,多尝试,你才能真正领悟这些技巧的精髓。下次咱们再聊点别的“赛博偏方”,再见!

赛博老中医 Python类型转换字符串

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/7630