首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python的msvcrt.getch()的行为很奇怪:从标准输入中获取并存储了多个字符;结果值甚至不是字符串或字符类型

msvcrt.getch()是Python标准库中的一个函数,它用于从控制台中获取用户的单个字符输入。然而,msvcrt.getch()的行为在某些情况下可能会显得奇怪。

具体来说,msvcrt.getch()函数在Windows系统上的行为可能会有一些问题。在Windows中,当用户在控制台中输入一个字符时,msvcrt.getch()会立即返回该字符,但如果用户连续输入多个字符,则msvcrt.getch()会将所有字符都存储在内部缓冲区中,并返回第一个字符。这意味着如果用户在控制台上连续输入了"abc",msvcrt.getch()会返回字符"a",而"bc"则会存储在内部缓冲区中。

此外,msvcrt.getch()返回的值并不是字符串或字符类型,而是一个表示字符的整数值。这是因为在底层,msvcrt.getch()实际上是调用了C库中的getch()函数,并将其返回值转换为整数返回给Python。

针对这个问题,如果你需要获取并存储多个字符,你可以考虑使用其他方法,如使用input()函数来获取用户的输入并存储为字符串。如果你需要实时捕获单个字符输入,你可以考虑使用第三方库,如readcharkeyboard

总结起来,msvcrt.getch()是一个用于从控制台获取单个字符输入的函数,但在Windows系统上的行为可能会让人感到奇怪。它将连续输入的字符存储在内部缓冲区中,并返回第一个字符的整数值。为了解决这个问题,你可以选择其他方法来获取多个字符输入,或者使用第三方库来实现你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 进阶指南(编程轻松进阶):九、深奥的 Python 怪现象

这种行为也通过不存储重复的小整数来节省内存,如图 9-1 所示。 图 9-1:Python 通过对单个整数对象(左)使用多个引用来节省内存,而不是对每个引用使用单独的、重复的整数对象(右)。...他们永远不会使用is操作符来比较整数、浮点数、字符串、布尔值或其他简单数据类型的值。...例如,尝试在交互 Shell 中从'c'和'at'创建'cat'字符串;您会注意到 CPython 创建最终的'cat'字符串作为新的字符串对象,而不是重用为spam创建的字符串对象: >>> bacon...在交互式 Shell 中输入以下内容: >>> all([]) True 最好将all([])理解为求值“列表中的所有项目都是真值”而不是“列表中的所有项目都是True”否则,您可能会得到一些奇怪的结果...但这就是为什么学习计算机和软件的奇怪角落和缝隙是有价值的。当您的代码出现错误或崩溃时(或者甚至只是行为怪异,让您觉得“这很奇怪”),您需要理解调试这些问题的常见陷阱。

63240

Python 自动化指南(繁琐工作自动化)第二版:四、列表

列表数据类型 列表是一个包含有序序列中多个值的值。术语列表值指的是列表本身(它是一个可以存储在变量中或像任何其他值一样传递给函数的值),而不是列表值内部的值。...用切片从另一个列表中获取一个列表 就像索引可以从列表中获取单个值一样,切片可以以新列表的形式从列表中获取多个值。像索引一样,切片在方括号之间键入,但它有两个由冒号分隔的整数。...实际上,你几乎不需要删除简单的变量。del语句主要用于从列表中删除值。 使用列表 当您第一次开始编写程序时,很容易创建许多单独的变量来存储一组相似的值。...身份和id()函数 您可能想知道为什么前一节中可变列表的奇怪行为没有发生在整数或字符串这样的不可变值上。我们可以用 Python 的id()函数来理解这一点。...包含元组或字符串值的变量可以被新的元组或字符串值覆盖,但这与原地修改现有值不是一回事——比如说,append()或remove()方法对列表所做的。 变量不直接存储列表值;他们将引用存储到列表中。

1.5K20
  • Python 进阶指南(编程轻松进阶):六、编写 Python 风格的代码

    格式化字符串 字符串出现在几乎所有的计算机程序中,不管是哪种语言。这种数据类型很常见,所以有许多方法来操作和格式化字符串也就不足为奇了。本节重点介绍几个最佳案例。...用 F 字符串格式化字符串 字符串格式化,或字符串插值,是创建包含其他字符串的字符串的过程,在 Python 中有很长的历史。...然而,这种方法有些复杂,会产生不可读的代码,所以我不鼓励使用它。 但是从 Python 3.6 开始, F 字符串(格式字符串的缩写)提供了一种更方便的方法来创建包含其他字符串的字符串。...如果您正在编写早期 Python 版本运行的代码,请坚持使用format()字符串方法或%s转换说明符。 制作列表的浅层副本 切片语法可以很容易地从现有的字符串或列表中创建新的字符串或列表。...F 字符串以字母f作为字符串的前缀,并使用大括号来标记可以在字符串中放置字符串(或整个表达式)的位置。

    94860

    30分钟学会用Python编写简单程序

    这样让我们知道该值实际上是文本而不是数字(或其他数据类型)。在最后一次交互中,我们看到表达式"32"产生一个字符串,而不是一个数字。...在Python中,输入是用一个赋值语句结合一个内置函数input实现的。输入语句的确切形式,取决于你希望从用户那里获取的数据类型。...这种形式的赋值初看很奇怪,但实际上非常有用。这里有一个例子:假设有两个变量x和y,你希望交换它们的值。也就是说,你希望将当前存储在x中的值存储在y中,将当前存储在y中的值存储在x中。...但要记住,多个值的技巧不适用于字符串(非求值)输入,如果用户键入逗号,它只是输入字符串中的一个字符。逗号仅在随后对字符串求值时,才成为分隔符。...在Python中,使用等号(=)表示将值赋给变量。利用赋值,程序可以从键盘获得输入。Python还允许同时赋值,这对于利用单个提示获取多个输入值很有作用。

    3.9K100

    网盘分享内容总被无端和谐?来试试这个!

    但是时间长了还是会被和谐 盲猜百度可能是在字节级别对文件进行检查了 所以就想到了通过打乱文件存储内容的的方式 是不是就可以解决这个问题了呢?...破解几乎是不可能的 其次语言就选用python,比较简单灵活 最后是代码思路 拿到当前目录下所有的文件列表 递归遍历每一个文件并做加(解)密处理 ## 代码实现 ### 加密程序 import...aes = AES.new(pad_key(key.encode()), AES.MODE_ECB) # 加密内容,此处需要将字符串转为字节...结果为字节类型 encrypted_data = aes.encrypt(pad(data)) with open(absolute_file + "_...aes = AES.new(pad_key(key.encode()), AES.MODE_ECB) # 加密内容,此处需要将字符串转为字节

    1.6K20

    27 个问题,告诉你Python为什么这么设计

    目录 为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么在方法定义和调用中显式使用“self”?...为什么 join()是一个字符串方法而不是列表或元组方法? 异常有多快? 为什么Python中没有switch或case语句? 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗?...例如,在输入以下语句后: >>> x = 1.2 为 x 存储的值是与十进制的值 1.2 (非常接近) 的近似值,但不完全等于它。...任何动作都不会将值 8 更改为其他值,在 Python 中,任何动作都不会将字符串 "8" 更改为其他值。 为什么必须在方法定义和调用中显式使用“self”? 这个想法借鉴了 Modula-3 语言。...从Python 1.6开始,字符串变得更像其他标准类型,当添加方法时,这些方法提供的功能与始终使用String模块的函数时提供的功能相同。

    6.7K11

    Python 进阶指南(编程轻松进阶):八、常见的 Python 陷阱

    修改列表中的项目就可以了;它改变了列表中容易出错的条目的数量。 在列表中安全地添加或删除条目的另一种可能的方法是从列表的末尾向后迭代到开头。...可变数据类型包括列表、字典、集合和由class语句构成的对象。不要将这些类型的对象作为默认参数放在def语句中。 不要用字符串连接来构建字符串 在 Python 中,字符串是不可变对象。...循环的每次迭代都会创建一个新的字符串对象并丢弃旧的字符串对象:在代码中,这看起来像是在一个for或while循环中的连接,如下所示: >>> finalString = '' >>> for i in...这不是 Python 陷阱;IEEE 754 标准是一种直接在 CPU 浮点电路中实现的硬件标准。...要将括号识别为一个元组值 2 ,需要使用尾随逗号。在 Python 中,逗号构成的元组比括号多。 总结 每种语言都会出现沟通错误,甚至在编程语言中也是如此。Python 有几个陷阱会让粗心的人上当。

    1.6K50

    【Python 速览 】 —— 课前甜点,打开你的味蕾

    解释器的操作方式类似 Unix Shell:用与 tty 设备关联的标准输入调用时,可以交互式地读取和执行命令;以文件名参数,或标准输入文件调用时,则读取并执行文件中的 脚本。...text = "# 这不是注释因为它是在引号之内。" Python用作计算器 数字 解释器像一个简单的计算器:你可以输入一个表达式,它将给出结果值。...在 Python shell 中,字符串定义和输出字符串看起来可能不同。 print() 函数会略去标示用的引号,并打印经过转义的特殊字符,产生更为易读的输出: s = 'First line....索引用来获取单个字符,而 切片 允许你获取子字符串: word[0:2] # 从 0 号位 (含) 到 2 号位 (不含) 的字符 'Py' word[2:5] # 从 2 号位 (含) 到 5 号位...Python 和 C 一样,任何非零整数都为真,零为假。这个条件也可以是字符串或列表类型的值,事实上,任何序列都可以:长度非零就为真,空序列则为假。示例中的判断只是最简单的比较。

    6900

    第3章 | 基本数据类型 | 布尔类型,字符,元组,指针类型

    Python 允许在布尔上下文中使用字符串、列表、字典甚至 Set,如果这些值是非空的,则将它们视为 true。...作为替代方案,标准库函数 std::char::from_u32 可以接受任何 u32 值并返回一个 Option:如果此 u32 不是允许的 Unicode 码点,那么 from_u32...标准库为字符提供了一些有用的方法,你可以在“char(原始类型)”和模块“std::char”下的在线文档中找到这些方法。 assert_eq!...3.4 元组 元组是各种类型值的值对或三元组、四元组、五元组等(因此称为 n-元组或元组)。可以将元组编写为一个元素序列,用逗号隔开并包裹在一对圆括号中。...这对人类读者来说可能很奇怪,不过一旦在多行列表末尾添加或移除了条目(entry),在显示差异时就会更容易阅读。 为了保持一致性,甚至有包含单个值的元组。

    9310

    python零基础系统学习教程之Python 变量类型

    点击蓝字“python教程”关注我们哟! Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。...基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。...标准数据类型 在内存中存储的数据可以有多种类型。 例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。 Python 定义了一些标准类型,用于存储各种类型的数据。...在 Python3.X 版本中 long 类型被移除,使用 int 替代。 Python字符串 字符串或串(String)是由数字、字母、下划线组成的一串字符。...如果你要实现从字符串中获取一段子字符串的话,可以使用 [头下标:尾下标] 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

    62320

    Python 变量类型详解

    文 | 豌豆 图 | 来源网络 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。...因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。 变量赋值 Python 中的变量赋值不需要类型声明。 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。...标准数据类型 在内存中存储的数据可以有多种类型。 例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。 Python 定义了一些标准类型,用于存储各种类型的数据。...python的字串列表有2种取值顺序: 从左到右索引默认0开始的,最大范围是字符串长度少1 从右到左索引默认-1开始的,最大范围是字符串开头 如果你要实现从字符串中获取一段子字符串的话,可以使用变量 [...头下标:尾下标],就可以截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

    1.2K40

    使用Python进行数学建模(语言基础2)

    Python 解释器及丰富的标准库,提供了适用于各个主要系统平台的源码或机器码,这些可以到 Python 官网: https://www.python.org/ 免费获取,并可自由地分发。...Python 解释器易于扩展,可以使用 C 或 C++(或者其他可以从 C 调用的语言)扩展新的功能和数据类型。Python 也可用作可定制化软件中的扩展程序语言。...这个列表最少也会有一个元素;如果没有给定输入参数,sys.argv[0] 就是个空字符串。如果给定的脚本名是 '-' (表示标准输入),sys.argv[0] 就是 '-'。...在这种编码方式中,世界上大多数语言的字符都可以同时用于字符串字面值、变量或函数名称以及注释中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名,而且任何可移植的代码都应该遵守此约定。...例如: 第一行数标注了字符串 0...6 的索引的位置,第二行标注了对应的负的索引。那么从 i 到 j 的切片就包括了标有 i 和 j 的位置之间的所有字符。

    88140

    Python2和Python3的一些语法区别

    text = raw_input() raw_input 接收的则是你输入的字符串,而不管你输的是什么内容。如果你直接拿 raw_input 得到的“数字”去比较大小,则会得到奇怪的结果。...3里只有input函数,它接收你输入的字符串,不管你输的是什么。 text = input() 那么在3里,如何像2一样得到用户输入的一个值呢?...bytes 相当于python2中的str类型,从网页上抓取下来的数据流也是该类型的 在python3中,要得到一个bytes类型的变量,可以在字符串内容前面加入b得到,前提是该字符串的内容是可以完全由...ASCII码表示的,否则会出现语法错误 相当于Python2中的str类型,从网页上抓取下来的数据流也是该类型的 在Python3中,要得到一个bytes类型的变量,可以在字符串内容前面加入b得到,...问题:为何会出现乱码的情况 unicode是表示了世界上所有的字符的, 但是其内部的存储是以二进制位存储的,比如你好的unicode编码为\u4f60\u597d 但是我们所见到的并不是\u4f60\

    1.4K80

    图解python | 基础数据类型

    本文详细讲解Python中变量赋值、数据类型以及数据类型的转换。 变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。...基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。...4.标准数据类型 在内存中存储的数据可以有多种类型。 例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。 Python 定义了一些标准类型,用于存储各种类型的数据。...python的字串列表有2种取值顺序: 从左到右索引默认0开始的,最大范围是字符串长度少1 从右到左索引默认-1开始的,最大范围是字符串开头 [Python数据类型 | 字符串(String)] 如果你要实现从字符串中获取一段子字符串的话...,可以使用 头下标:尾下标 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

    5K42

    Android项目重构之路:界面篇

    资源文件的单一 Android提供了各种资源文件,strings.xml用来存储字符串,arrays.xml用来存储字符串数组,colors.xml用来存储颜色值,dimens.xml用来存储尺寸值,等等...资源文件的单一,是说所有相关的资源信息要在资源文件里定义并引用到代码或布局文件里,而不是在代码或布局文件里直接定义。...很多开发人员,为了图方便,应用界面中出现的字符串经常在代码或布局文件里直接定义的,尺寸值也是,这样造成的结果就是,当某些字符串需要修改时,比如要支持国际化,或一些尺寸值需要修改时,通常是很多地方都要修改...因此,就必须规范好,应用界面中的字符串统一在strings.xml中定义,颜色值统一在colors.xml中定义,尺寸值统一在dimens.xml中定义,代码或布局里需要用到的都去引用资源文件相应的字段...资源文件的分类 strings.xml文件用来存储应用中的所有字符串,包括页面标题,按钮文字,标签文字,提示文字等等,应该做好分类并统一存放。

    90940

    Python 进阶指南(编程轻松进阶):七、编程术语

    所有对象都有值、标识和数据类型。值是对象表示的数据,比如整数42或者字符串hello。尽管有些令人困惑,但一些程序员将术语值用作对象的同义词,尤其是对于像整数或字符串这样的简单数据类型。...---- 变量隐喻:盒子与标签 很多入门书籍用盒子来比喻变量,这是一种过于简单化的做法。很容易把变量想象成一个存储值的盒子,就像图 7-1 中那样,但是当提到引用时,这个比喻就站不住脚了。...图 7-2 显示了先前spam和eggs示例上的标签。 图 7-2:变量也可以认为是值上的标签。 因为多个变量可以引用同一个对象,所以该对象可以“存储”在多个变量中。...虽然看起来字符串在bacon中的值从'Goodbye'变成了'Hello' 1 ,但实际上它被一个具有新 id 的新字符串对象覆盖了。...因为 Python 的+操作符可以将整数值相加,也可以将字符串值连接起来,所以错误地使用字符串值'4'和'2'代替整数导致了非预期的行为。 形参与实参 形参是def语句中括号之间的变量名。

    1.6K20

    Python 密码破解指南:0~4

    你将学习一些其他的数据类型(比如第三章的中的字符串),但是现在只要记住,任何时候我们谈论一个值,这个值是一个特定的数据类型。通常只需查看值是如何书写的,就可以很容易地识别数据类型。...第一次输入spam + 5 ➊ 时,表达式的计算结果为20 ➋,因为你在变量spam中存储了值15。...你也可以存储一个字符串,就像我们对spam变量所做的那样,然后复制这个变量来代替 ➋。您甚至可以将复制的字符串存储回同一个变量或新变量中。...+操作符可以做加法或字符串连接。*操作符可以做乘法或字符串复制。 使用索引从字符串中获取字符 您的加密程序经常需要从字符串中获取单个字符,这可以通过索引来完成。...大多数情况下,您的代码将使用正索引,但有时使用负索引更容易。 使用切片从字符串中获取多个字符 如果你想从一个字符串中得到多个字符,你可以使用切片来代替索引。

    48840

    Python中sys模块

    sys.displayhook调用在 交互式Python会话中输入的表达式的结果。可以通过为其分配另一个单参数函数来自定义这些值的显示sys.displayhook。...它们的含义是:type获取正在处理的异常的异常类型(类对象); value获取异常参数(其 关联值或第二个参数,如果异常类型是类对象,则始终为类实例); traceback 获取一个回溯对象(参见参考手册...这是Python 2.7及更高版本中的常见行为。否则,其值 和行为方式与2.7之前的Python版本相同。...如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本), path[0]则是空字符串,它指示Python首先搜索当前目录中的模块。...sys.winver 用于在Windows平台上形成注册表项的版本号。它作为字符串资源1000存储在Python DLL中。该值通常是前三个字符version。

    1.4K50

    Python全网最全基础课程笔记(一)——基础入门

    函数 函数是执行特定任务的独立代码块,可以接受输入参数并返回结果。Python中的函数定义以def关键字开始。...字典(Dict) 字典用于存储键值对,其中键必须是可哈希的(如字符串、数字、元组等),且每个键在字典中是唯一的。 支持通过键快速访问值,常用于实现映射关系或对应关系。...三、输入input 在Python中,input() 函数是一个非常基础且常用的内置函数,它允许程序暂停执行并等待用户从标准输入(通常是键盘)输入一些文本。...总结 Python的input()函数是一个简单但强大的工具,用于从用户那里获取文本输入。...虽然它本身不接受除提示字符串以外的任何参数,但你可以通过类型转换和异常处理来扩展其功能,以处理各种类型的输入并优雅地处理错误情况。

    17600
    领券