问题的提出和解决方案概述
在这篇文章中,你将学习如何用Python打印一个字符串和一个整数。
为了使它更有趣,我们有以下运行场景。
Finxter学院决定用用户的名字(一个字符串)和已解决的问题(一个整数)向其用户发送一条鼓励信息。他们为您提供了五(5)个虚构的用户,请您选择最合适的选项。
| 名字(First_Name | 解决的谜题 |
| 史蒂夫 | 39915 |
| 艾米 | 31001 |
| 邓小平 | 29675 |
| 马库斯 | 24150 |
| 爱丽丝 | 23580 |
问题:我们如何编写代码来打印一个字符串和一个整数?
我们可以通过以下方法之一来完成这项任务。
- 方法1:使用一个
print()函数 - 方法2:使用
print()函数和str()方法 - 方法3:使用
f-string与print()函数 - 方法4:使用
%d,%s和%f操作符 - 方法5:使用识别号
- 方法6:使用
[f-string](https://blog.finxter.com/string-formatting-vs-format-vs-formatted-string-literal/)条件 - 奖励:格式化CSV进行输出
方法1:使用print()函数
这个例子使用 print()函数来输出一个字符串和一个整数。
print('Steve', 39915)
这个函数提供了接受各种数据类型的能力,并将结果输出,用逗号(,)分隔到终端。
虽然不是最美观的输出,但它能完成工作。函数 print()函数在其最简单的层次上!
| Steve 39915 |
方法2:使用print()函数和str()方法
这个例子使用 print()函数和 str()方法来格式化和输出一个包含一个字符串和一个整数的句子。
print('Steve has solved ' + str(39915) + ' puzzles!')
为了成功地输出该函数的内容 print()函数的内容,Integer必须首先被转换为一个字符串。这可以通过调用 str()方法,并将39915 作为一个参数。
| Steve has solved 39915 puzzles! |
方法3:使用f-string和print()函数
本例中使用了 [f-string](https://blog.finxter.com/string-formatting-vs-format-vs-formatted-string-literal/)内的 print()函数。这个方法使用大括号 ({}) 来接受和显示数据。
first_name = 'Steve'
solved = 39915
print(f'{first_name} has solved {solved} puzzles to date!')
以上,声明了两(2)个变量:first_name 和solved 。
该 print()函数被调用并传递这两(2)个变量,每个变量都在大括号 ({}))内。这表明 Python 应该期待两(2)个未知数据类型的变量。该 print()函数执行并将这个输出发送到终端。
| Steve has solved 39915 puzzles! |
如果你需要打印出所有的Finxter用户呢?这个例子假设数据被保存到独立的 Lists并使用一个 For循环。
f_name = ['Steve', 'Amy', 'Peter', 'Marcus', 'Alice']
f_solved = [39915, 31001, 29675, 24150, 23580]
for i in range(len(f_name)):
print(f'{f_name[i]} has solved {f_solved[i]} puzzles to date!')
| Steve has solved 39915 puzzles to date!
Amy has solved 31001 puzzles to date! Peter has solved 29675 puzzles to date! Marcus has solved 24150 puzzles to date! Alice has solved 23580 puzzles to date! |
方法4:使用%d,%s和%f运算符
这个例子使用%d (十进制值)、%s (字符串值)和%f (浮动值)里面的 print()函数来输出虚构的Finxter用户的数据。
f_name = ['Steve', 'Amy', 'Peter', 'Marcus', 'Alice']
f_solved = [39915, 31001, 29675, 24150, 23580]
f_avg = [99.315, 82.678, 79.563, 75.899, 71.233]
i = 0
while i < len(f_name):
print("%s solved %d puzzles with an average of %3.2f." % (f_name[i], f_solved[i], f_avg[i]))
i += 1
上面,我们声明了三(3)个列表。每个列表为每个用户携带不同的信息(f_name,f_solved,f_avg )。
下面一行实例化了一个 while循环和一个计数器(i),该计数器在每次迭代时都会增加。这个循环反复进行,直到达到f_name 中的最后一个元素。
在循环中,%s (接受字符串)被替换为f_name[i] 的值。然后,%d (接受整数)被替换为f_solved[i] 的值。最后,%3.2f(用于浮点数)的值被替换为f_avg[i] ,有两(2)位小数。输出显示如下。
| Steve solved 39915 puzzles with an average of 99.31.
Amy solved 31001 puzzles with an average of 82.68. Peter solved 29675 puzzles with an average of 79.56. Marcus solved 24150 puzzles with an average of 75.90. Alice solved 23580 puzzles with an average of 71.23. |
注意:在%3.2f 注释中,三(3)的数值表示宽度,2表示小数点后的数字。试试不同的宽度吧!
方法5:使用识别码
这个例子使用字段识别号,如0、1、2等,在 print()函数来确定要显示的字段和顺序。
f_name = ['Steve', 'Amy', 'Peter', 'Marcus', 'Alice']
f_solved = [39915, 31001, 29675, 24150, 23580]
for i in range(len(f_name)):
print('{0} solved {1} puzzles!'.format(f_name[i], (format(f_solved[i], ',d'))))
上面,两个(2) Lists被声明。每个 List为每个Finxter用户携带不同的信息(f_name,f_solved)。
然后,使用一个 For循环,代码运行了上述 Lists.包裹在大括号内的数字({0}, {1})表示预期数据的保留位置。这些数据出现在 format()函数 ((format(f_solved[i], ',d')))),并输出到终端。
| Steve solved 39,915 puzzles!
Amy solved 31,001 puzzles! Peter solved 29,675 puzzles! Marcus solved 24,150 puzzles! Alice solved 23,580 puzzles! |
注意:f_solved 中的数据被格式化为显示千位逗号(',d')。
方法6:使用f-string和一个条件
这个例子使用了一个f-string 和一个条件,根据函数内部的一个条件来显示结果。 print()函数中的条件来显示结果。
f_name = ['Steve', 'Amy', 'Peter', 'Marcus', 'Alice']
f_solved = [39915, 31001, 29675, 24150, 23580]
print(f'Has Alice solved more puzzles than Amy? {True if f_solved[4] > f_solved[1] else False}')
以上,声明了两(2)个列表。每一个 List为每个Finxter用户携带不同的信息(f_name,f_solved)。
在这个 print()函数中,大括号内的代码({})检查Alice所解决的谜题的数量是否大于Amy所解决的谜题的数量。根据结果返回真或假,并与字符串一起输出到终端。
| Has Alice solved more puzzles than Amy? False |
奖励:把它放在一起!
这篇文章使用了几种方法来格式化一个字符串和一个整数。然而,让我们把这些放在一起,生成一个自定义的邮件正文吧
第一步是安装Pandas库。
import pandas as pd
finxters = pd.read_csv('finxter_top5.csv')
for _, row in finxters.iterrows():
user_email = row[3]
e_body = f"""
Hello {row[0]} {row[1]},\n
The Finxter Academy wants to congratulate you on solving {row[2]:,d} puzzles.
For achieving this, our Team is sending you a free copy of our latest book!
Thank you for joining us.
The Finxter Academy
"""
print(e_body.strip())
这段代码读入一个虚构的finxter_top5.csv 文件。
| 名_姓名 | 姓氏_姓名 | 已解决 | 电子邮件 | |
| 0 | 邓小平 | 汉密尔顿 | 39915 | steveh@acme.org |
| 1 | 艾米 | 普利斯特 | 31001 | amy.p@bminc.de |
| 2 | 彼得 | 邓恩 | 29675 | pdunn@tsce.ca |
| 3 | 马库斯 | 邓 | 24150 | marwil@harpoprod.com |
| 4 | 爱丽丝 | 米勒 | 23580 | amiller@harvest.com |
接下来,一个For循环被实例化以遍历DataFrame的每一行finxters 。
注意:for 循环中的下划线(_)字符表示该值不重要,不使用,但需要。
对于每个循环,用户的电子邮件地址从行的位置(row[3]) 。这个电子邮件地址保存到user_email 。
接下来,自定义的电子邮件正文使用f-string ,并在敬语中传递用户的名字和姓氏({row[0]} {row[1]})。然后,solved 变量被格式化为显示逗号(,),表示千位数({row[2]:,d})。结果被保存到e_body ,在这个例子中,被输出到终端。
在这个例子中,第一条记录显示。
| Hello Steve Hamilton,
The Finxter Academy wants to congratulate you on solving 39,915 puzzles. For achieving this, our Team is sending you a free copy of our latest book. Thank you for joining us. The Finxter Academy |
摘要
这(6)种打印字符串和整数的方法应该给你足够的信息来选择最适合你编码要求的方法。
祝您好运,编码愉快!