Python基础:输入输出详解-输出字符串格式化

news2024/11/24 7:34:57

在这里插入图片描述

  Python中的输入和输出是编程中非常重要的方面。

1. 输入输出简单介绍

1.1 输入方式

  Python中的输入可以通过input()函数从键盘键入,也可以通过命令行参数或读取文件的方式获得数据来源。

1)input()示例

  基本的input()函数,会将用户在终端(键盘)输入的内容作为字符串返回。

user_input = input("请输入内容:")

  通过类型转换为其他数据类型,如:
  使用 int() float() 函数将用户输入的内容转换为整数或浮点数。

# 获取用户输入的整数
user_input = int(input("请输入整数:"))

# 获取用户输入的浮点数
user_input = float(input("请输入浮点数:"))

  使用eval() 函数(不推荐,慎用)
  eval() 函数用于执行以字符串形式给出的 Python 表达式,并返回表达式的结果。
  注意:使用 eval() 函数时要非常小心,特别是当从不受信任的来源获取输入时。不建议直接将用户输入传递给eval() 函数,因为它可能执行任意的 Python 代码,包括潜在的危险操作。最好是在确定输入是安全的情况下使用 eval()

"""
用户可以输入任何合法的数学表达式,比如 "2 + 3 * 4"。eval() 函数会将输入的字符串作为 Python 表达式来计算,并输出结果。使用 try-except 块来捕获可能的异常,以防止输入的表达式引发错误。
"""

# 获取用户输入的数学表达式并计算结果
expression = input("请输入一个数学表达式:")
try:
    result = eval(expression)
    print("计算结果:", result)
except Exception as e:
    print("发生错误:", e)

2) 命令行参数

  通过命令行参数输入是一种常见的方式,特别是当你想在运行脚本时提供输入而不交互地输入时。
  演示如何通过命令行参数输入:

# 文件名: script.py

import sys

# 获取命令行参数
# 注意:sys.argv[0] 是脚本的名称,而实际的参数从 sys.argv[1] 开始
if len(sys.argv) < 2:
    print("请提供一个参数(例如:python script.py 输入内容)")
else:
    # 第一个命令行参数是输入的内容
    user_input = sys.argv[1]
    print("您输入的内容是:", user_input)

  在命令行中运行这个脚本,例如:

python script.py Hello

  输出应该是:

您输入的内容是: Hello

  通过sys.argv 获取命令行参数,如果没有提供足够的参数,脚本会输出一个提示。第一个参数是脚本的名称,实际的输入参数从第二个开始。

3)通过文件读取方式

  使用 open() 函数来打开文件,并使用read() 方法来读取文件的内容。

# 打开文件
file_path = 'example.txt'
with open(file_path, 'r') as file:
    # 读取整个文件内容
    content = file.read()
    print("文件内容:")
    print(content)

  open(file_path, 'r') 打开一个名为 'example.txt'的文件进行读取。使用 with语句可以确保在文件使用完毕后正确关闭。read() 方法用于读取整个文件的内容,并将其存储在变量 content中,然后通过 print() 函数输出文件内容。

1.2 输出方式

  在 Python 中,主要使用 print() 函数进行输出。print() 函数可以打印字符串、数字和其他数据类型的内容到控制台。

2. 复杂的输出格式

  程序的输出有几种显示方式,数据既可以输出供人阅读,也可以写入文件备用。
  格式化输出包括以下几种方法:
  1)使用“格式化字符串字面量”
  2)使用str.format()方法
  3)手动格式化字符串
  4)旧式字符串格式化方法
  当你进行调试并想要快速显示变量的值时,可以使用 repr()str() 函数将变量转化为字符串。这两个函数的选择取决于你对输出字符串的期望:
  str()函数: 返回一个供人阅读的字符串。这意味着输出通常更为友好,适合直接展示给最终用户查看。
  repr() 函数: 生成适于解释器读取的字符串,即如果没有等效的语法,会强制执行 SyntaxError。这在调试过程中更有用,因为它提供更多的细节,有助于理解对象的内部结构。
在一般情况下,数字、列表、字典等结构的值,使用str()repr() 函数输出的表现形式是相似的。但对于自定义类,你可以通过实现 __str____repr__ 方法来定义它们的输出形式。下面是一个简单的例子:

class Example:
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return f"Example with value: {self.value}"
    def __repr__(self):
        return f"Example({self.value})"

# 创建一个示例对象
example_obj = Example(42)

# 使用 str() 输出
print(str(example_obj))  # 输出: Example with value: 42

# 使用 repr() 输出
print(repr(example_obj))  # 输出: Example(42)

  官网示例
在这里插入图片描述

2.1 格式化字符串字面量

  格式化字符串字面值 (简称为f-字符串)在字符串前加前缀fF,通过 {expression} 表达式,把 Python 表达式的值添加到字符串内。
基本语法:

variable1 = "value1"
variable2 = "value2"
formatted_string = f"Text {variable1}, more text {variable2}."

  格式说明符是可选的,写在表达式后面,可以更好地控制格式化值的方式。
  f-string 提供了一种直观、简洁且强大的字符串格式化方式,适用于许多场景:

2.1.1 插入变量值

"""
    输出: “姓名: Scott, 年龄: 30”
"""
name = "Scott"
age = 30
print(f"姓名: {name}, 年龄: {age}")

2.1.2 表达式计算

"""
    输出: “The sum of 5 and 10 is 15.”
"""
x = 5
y = 10
print(f"The sum of {x} and {y} is {x + y}.")

2.1.3 对齐和宽度控制

  使用 <,>,^控制文本的左对齐、右对齐和居中,以及指定字段的宽度。

"""
    输出: “姓名: Bob        年龄: 25”
"""
name = "Bob"
age = 25
print(f"姓名: {name:<10} 年龄: {age}")

2.1.4 格式规范

"""
    输出: 
    “The value of pi is approximately 3.1416 .”
    "小数点后保留3位:9.143"
"""
import math
print(f'The value of pi is approximately {math.pi:.4f} .')

number_f = 9.14298078
print(f'小数点后保留3位:{number_f:.3f}')

2.1.5 调用函数

"""
    输出:“Uppercase: HELLO WORLD!”
"""
print(f"Uppercase: {'hello world!'.upper()}")

2.1.6 使用字典和列表

"""
    输出:
    “姓名: Charlie, 年龄: 22”
    “我喜欢水果: apple, orange”
"""
# 使用字典
person = {'name': 'Charlie', 'age': 22}
print(f"姓名: {person['name']}, 年龄: {person['age']}")

# 使用列表
fruits = ['apple', 'banana', 'orange']
print(f"我喜欢水果: {fruits[0]}, {fruits[2]}")

2.1.7 内嵌if语句

"""
    输出:“你可以购买酒类商品。”
"""
is_adult = True
print(f"你{'可以' if is_adult else '不可以'}购买酒类商品。")

2.1.8 转义字符

  可以使用{{ }} 来插入花括号字符,而不是作为f-string 的开始和结束。

"""
    输出:“值为: 42%, 而不是 {value}”
"""
value = 42
print(f"值为: {value}%, 而不是 {{value}}")

2.2 字符串 format() 方法

  str.format() 方法是Python中用于格式化字符串的一种方式。它允许你创建带有占位符的字符串,然后使用传递给format() 方法的参数替换这些占位符。这种方法使得字符串的格式更加清晰和灵活。
  基本语法:
  {} 是一个占位符,它将在运行时由format() 方法中提供的值替换。可以使用多个占位符,并按照顺序提供相应数量的值。

formatted_string = "Hello, {}!".format(value)

2.2.1 按位置访问参数

print('{0}, {1}, {2}'.format('a', 'b', 'c')) # 输出 a, b, c
print('{}, {}, {}'.format('a', 'b', 'c') ) # 输出 a, b, c
print('{2}, {1}, {0}'.format('a', 'b', 'c')) # 输出 c, b, a
print('{2}, {1}, {0}'.format(*'abc') ) # 输出 c, b, a
print('{0}{1}{0}'.format('abra', 'cad') ) # 输出 abracadabra

2.2.2 按名称访问参数

  输出:‘Coordinates: 37.24N, -115.81W’

coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')

2.2.3 访问参数的属性

c = 3-5j
('The complex number {0} is formed from the real part {0.real} '
 'and the imaginary part {0.imag}.').format(c)

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __str__(self):
        return 'Point({self.x}, {self.y})'.format(self=self)

str(Point(4, 2))

2.2.4 访问参数项

coord = (3, 5)
'X: {0[0]};  Y: {0[1]}'.format(coord) # 输出 'X: 3;  Y: 5'

2.2.5 对齐文本并指定宽度

"""
输出 :
    "left aligned                  "
    "                 right aligned"
    "           centered           "
    "***********centered***********"
"""
print('{:<30}'.format('left aligned')) 
print('{:>30}'.format('right aligned')) 
print('{:^30}'.format('centered'))
# use '*' as a fill char
print('{:*^30}'.format('centered') )

2.2.6 Replacing , , and and specifying a sign:%+f%-f% f

"""
输出
    "+3.140000; -3.140000"
    " 3.140000; -3.140000"
    "3.140000; -3.140000"
"""
# show it always
print('{:+f}; {:+f}'.format(3.14, -3.14))
# show a space for positive numbers
print('{: f}; {: f}'.format(3.14, -3.14))  
# show only the minus -- same as '{:f}; {:f}'
print('{:-f}; {:-f}'.format(3.14, -3.14))

2.2.7 进制转换

"""
输出
   "int: 42;  hex: 2a;  oct: 52;  bin: 101010"
   "int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010" 
"""
# format also supports binary numbers
print("int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42))

# with 0x, 0o, or 0b as prefix:
print("int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42))

2.2.8 使用逗号作为千位分隔符

print('{:,}'.format(1234567890)) # 输出 “1,234,567,890”

2.2.9 表示百分比

points = 19
total = 22

# 输出带2位小数的百分数:Correct answers: 86.36%
print('Correct answers: {:.2%}'.format(points/total)) 

2.2.10 使用特性类型的格式(如时间格式)

import datetime
d = datetime.datetime(2010, 7, 4, 12, 15, 58)
'{:%Y-%m-%d %H:%M:%S}'.format(d) # 输出 '2010-07-04 12:15:58'

2.2.11 嵌套参数

for align, text in zip('<^>', ['left', 'center', 'right']):
    print('{0:{fill}{align}16}'.format(text, fill=align, align=align))

运行结果:
在这里插入图片描述

octets = [192, 168, 0, 1]
formatted_string = '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
print(formatted_string)  # 转换为8进制:C0A80001
int(formatted_string,16) # 转换为10进制 3232235521
# 将5-11的十进制、八进制、十六进制、二进制列出来
width = 5
for num in range(5,12): 
    for base in 'dXob':
        print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
    print()

  运行结果:
在这里插入图片描述

2.3 手动格式化字符串

2.3.1 手动格式化实现同一个平方和立方的列表

  字符串对象的 str.rjust() 方法通过在左侧填充空格,对给定宽度字段中的字符串进行右对齐。同类方法还有str.ljust() str.center() 。这些方法不写入任何内容,只返回一个新字符串,如果输入的字符串太长,它们不会截断字符串,而是原样返回;虽然这种方式会弄乱列布局,但也比另一种方法好,后者在显示值时可能不准确(如果真的想截断字符串,可以使用 x.ljust(n)[:n] 这样的切片操作 。)

for x in range(1, 11):
    print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
    # Note use of 'end' on previous line
    print(repr(x*x*x).rjust(4))

运行结果:
在这里插入图片描述

2.3.2 str.zfill()

  该方法在数字字符串左边填充零,且能识别正负号:

print('12'.zfill(5)) # 输出 00012
print('-3.14'.zfill(7)) # 输出 -003.14
print('3.14159265359'.zfill(5)) # 输出 3.14159265359

2.4 旧式字符串格式化方法

  %运算符(求余符)也可用于字符串格式化。给定'string' % values,则string 中的% 实例会以零个或多个values元素替换。此操作被称为字符串插值。例如:

# 输出 The value of pi is approximately 3.142.
import math
print('The value of pi is approximately %5.3f.' % math.pi)

3. 读写文件

  见下一个博客内容。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣栈与队列--总结篇

前言 八道题&#xff0c;没想到用了五天。当然需要时间的沉淀&#xff0c;但是一天不能啥也不干啊&#xff01; 内容 首先得熟悉特点和基本操作。 栈与队列在计算机底层中非常重要&#xff0c;这就是为什么要学好数据结构。 可视化的软件例如APP、网站之类的&#xff0c;都…

Kotlin原理+协程基本使用

协程概念 协程是Coroutine的中文简称&#xff0c;co表示协同、协作&#xff0c;routine表示程序。协程可以理解为多个互相协作的程序。协程是轻量级的线程&#xff0c;它的轻量体现在启动和切换&#xff0c;协程的启动不需要申请额外的堆栈空间&#xff1b;协程的切换发生在用…

AVL树的底层实现

文章目录 什么是AVL树&#xff1f;平衡因子Node节点插入新节点插入较高左子树的左侧新节点插入较高左子树的右侧新节点插入较高右子树的左侧新节点插入较高右子树的右侧 验证是否为平衡树二叉树的高度AVL的性能 什么是AVL树&#xff1f; AVL树又称平衡二叉搜索树&#xff0c;相…

腾讯云服务器便宜吗?腾讯云服务器怎么买便宜?附优惠链接

首先&#xff0c;咱们来看一下大家最关心的一个问题&#xff1a;“腾讯云服务器便宜吗&#xff1f;”我的答案是&#xff1a;“YES&#xff01;它真的很便宜&#xff01;”比如&#xff0c;轻量2核2G3M服务器&#xff0c;1年只需要88元&#xff0c;是不是很划算&#xff1f;再比…

实例解释遇到前端报错时如何排查问题

前端页面报错&#xff1a; 1、页面报错500&#xff0c;首先我们可以知道是服务端的问题&#xff0c;需要去看下服务端的报错信息&#xff1a; 2、首先我们查看下前端是否给后端传了id: 我们可以看到接口是把ID返回了&#xff0c;就需要再看下p_id是什么情况了。 3、我们再次请…

基于ssm+vue的程序设计课程可视化教学系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

双11背后的中国云厂商:新“标准化”,和调整后的新韧性

降价并不代表一味的压缩自身利润空间&#xff0c;云厂商已经开始向具有更高利润空间的PaaS、SaaS产品腾挪&#xff0c;核心产品在总包占比越来越高。 作者|斗斗 编辑|皮爷 出品|产业家 今年云厂商&#xff0c;全面拥抱双11。 作为中国最大的云计算服务提供商&#xff0…

关于苏州立讯公司国产替代案例(使用我公司H82409S网络变压器和E1152E01A-YG网口连接器产品)

关于苏州立讯公司国产替代案例&#xff08;使用我们公司的H82409S网络变压器和E1152E01A-YG网口连接器产品&#xff09; 苏州立讯公司是一家专注于通信设备制造的企业&#xff0c;他们在其产品中选择了我们公司的H82409S网络变压器和E1152E01A-YG网口连接器&#xff0c;以实现…

在线协作工具都有哪些?推荐这10款

如今&#xff0c;互联网的快速发展不仅改变了我们的生活方式&#xff0c;也改变了我们的工作方式。 特别是对于一些与产品设计相关的公司或团体&#xff0c;网络不仅为其设计提供了稳定的资源和灵感&#xff0c;而且为成员之间的沟通和合作提供了更大的便利。 如果您也需要为…

ke11介绍本地,会话存储

代码顺序: 1.设置input,捕获input如果有多个用属性选择符例如 input[typefile]点击事件.向我们的本地存储设置键值对 2.在点击事件外面设置本地存储表示初始化的值.点击上面的事件才能修改我们想修改的值 会话(session)浏览a数据可以写到本地硬盘,关闭页面数据就没了 本地(…

JPA整合Sqlite解决Dialect报错问题, 最新版Hibernate6

前言 我个人项目中&#xff0c;不想使用太重的数据库&#xff0c;而内嵌数据库中SQLite又是最受欢迎的&#xff0c; 因此决定采用这个数据库。 可是JPA并不支持Sqlite&#xff0c;这篇文章就是记录如何解决这个问题的。 原因 JPA屏蔽了底层的各个数据库差异&#xff0c; 但是…

使用Python的time库来格式化时间

目录 一、引言 二、time库简介 三、使用time库来格式化时间 四、使用time库进行时间戳转换 五、使用time库获取当前时间 六、使用time库进行延时操作 七、使用time库计算时间差 八、使用time库获取系统时间 九、使用time库的其他功能 总结 一、引言 在Python中&…

鸿蒙OS应用开发初体验

什么是HarmonyOS&#xff1f; HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网&#xff08;IoT&#xff09;时代的全场景操作系统&#xff0c;旨在为各种类型的设备提供统一的操作系统平台和开发框架。Har…

自媒体剪辑必备,6个音效素材网站,你值得拥有。

这6个剪辑必备的音效素材网站一定要收藏好了&#xff0c;有了这几个网站能让你在剪辑的时候事半功倍&#xff0c;还不用担心版权问题。话不多说&#xff0c;直接上干货。 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站&#xff…

ref属性

Vue 中 可以给标签&#xff08;HTML元素标签、组件标签&#xff09;加上一个 ref 属性&#xff0c;作用就是给 标签加上一个标识&#xff0c;可以通过该标识获取当前需要的DOM元素或者组件实例对象。 通过原生js获取DOM 如果使用原生js来获取DOM元素时&#xff0c;我们最简单的…

Kafka学习笔记(一)

目录 第1章 Kafka概述1.1 消息队列&#xff08;Message Queue&#xff09;1.1.1 传统消息队列的应用场景1.1.2 消息队列的两种模式 1.2 定义 第2章 Kafka快速入门2.1 安装部署2.1.1 集群规划2.1.2 jar包下载2.1.3 集群部署 2.2 Kafka命令行操作 第3章 Kafka架构深入3.1 Kafka工…

23111708[含文档+PPT+源码等]计算机毕业设计基于javaweb的旅游网站前台与后台旅景点

文章目录 **论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 下面是系统运行起来后的部分截图&#xff1a; 论文截图&#xff1a; 实现&#xff1a; 代码片段&#xf…

身份证如何加水印?一分钟解决!

身份证是对我们每个人来说都非常重要的东西&#xff0c;在身份证上添加水印&#xff0c;可以明确证件的所有权和合法性&#xff0c;可以在一定程度上防止身份证被用于非法目的&#xff0c;如身份盗用、欺诈等。下面就向大家介绍三种实用的方法和具体操作步骤。 方法一&#xff…

剑指Offer || 116.省份数量

题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不含其他没有相连的城市。 …

Linux环境下安装部署MySQL8.0以上(内置保姆级教程)- 离线模式

摘要 本文档适用于在无网的情况下手动部署的MySQL。任何版本均可按照如下步骤进行部MySQL。 并且还讲解了如何修改数据库root账号的密码&#xff1b;以及还讲解了如何开启mysql远程访问权限&#xff0c;允许远程连接。 一、安装前准备工作 1.确认目前服务器上是否存在MySQL…