sys.stdin讀取鍵盤輸入【持續更新~】

背景

sys.stdin主要用來讀取鍵盤的一行或者多行輸入,讀取后表達形式為字符串

下文主要探討sys.stdin.readline()的使用,sys.stdin.read()參考:

  • sys.stdin.readline()是逐行讀取,通常會配合.strip()清除首尾的換行符/空格
  • sys.stdin.read()會讀取所有行,并合并為一個字符串,同樣可以搭配.strip()使用


1. 讀取單行鍵盤輸入

1.1 普通數字


這里的注釋先不看,是1.2嵌套字符串的注釋說明;

# input_ = sys.stdin.read().strip()  # 一次性讀取多行內容并合并成一個字符串
# input_ = sys.stdin.readline()  # 一次讀取一行,會帶上(首尾的)行結束符/行回車符
input_ = sys.stdin.readline().strip()  # 刪去首尾的空格符(一般都用這個)
# input_ = input()  # (不建議)多行情況下很不方便,單行等效于sys.stdin.readline().strip()print(input_)  # "abcde" | 'abcde'  <這里實際上是'"abcde"',字符串顯示是不顯示外層的雙引號 | 如果輸入是'abcde',則實際上是"'abcde'">
print(repr(input_))  # 驗證一下有沒有嵌套字符串,
print(type(input_))  # str
# 平常我們以為英文單引號,雙引號是一樣的即.split('"')?=.split("'")), 其實不一樣,內層的' or "才是split的分割字符
# 還有一個細節是split的對象是字符串的內層,也就是打印出來的我們看到的那一部分
# 最難崩的一點是如果split生效,結果會在外層再套上一層''(注意這里不管內層是''還是""最后都會套上'')
# 這里split生效指的是分割字符存在于字符串的內層,如'"abcde"'.split('"')就會生效,否則會返回只包含字符串整體(即包含外層)的列表
print(input_.split('"'))  # ['', 'abcde', ''] | ["'abcde'"]
print(input_.split("'"))  # ['"abcde"'] | ['', 'abcde', '']
print(input_.split(','))

右鍵run,鍵盤輸入123,回車!

1.2 嵌套字符串

輸入"abcde",回車:

輸入'abcde',回車:

  • 根據輸入字符串中外層""或''的不同,以及split("'")與split('"')的不同,分割結果也不一樣:
  • 具體可以通過repr()函數進行驗證,repr()函數顯示字符串整體,
  • 直接print會隱藏字符串外層的''或""


1.3 字符串+列表 (仍會在外層嵌套字符串)

輸入"abcde",["a", "b", "c", "d", "e"],回車:

由兩部分構成:
第一部分是字符串"abcde",第二部分是字符串列表["a", "b", "c", "d", "e"],中間用英文,隔開

那么怎么讀取"abcde",["a", "b", "c", "d", "e"]并得到"abcde"和["a", "b", "c", "d", "e"]兩部分呢?

--核心思想是找到分隔符所在的位置,然后分離兩部分,之后使用json.loads方法解析回列表:

# 從標準輸入讀取內容并去除首尾空白
input_data = sys.stdin.readline().strip()# 分割輸入為兩部分(字符串部分和列表部分)
# 找到第一個點是第一個逗號,確保只在列表內部
split_index = input_data.find(',')
print(repr(input_data[:split_index]))  # '"abcde"'
str_part = input_data[:split_index].strip('"')  # 提取字符串部分并去除引號
list_part_str = input_data[split_index+1:]      # 提取列表部分的字符串# 將列表部分的字符串解析為Python列表
list_part = json.loads(list_part_str)# 輸出結果及類型驗證
print("字符串部分:", str_part)
print("字符串部分整體:", repr(str_part))
print("字符串部分類型:", type(str_part))
print("列表部分:", list_part)
print("列表部分整體:", repr(list_part))
print("列表部分類型:", type(list_part))

輸入"abcde",["a", "b", "c", "d", "e"],回車:

2. 讀取多行鍵盤輸入

一個算法經典示例:

題目:第一行是數據的組數,接下來每一行都有倆整數(空格隔開),求每一行倆整數和

輸入:

3
1 1
2 2
3 3

輸出:

真正示例的輸出應該直接是:(因為鍵盤輸入已經完全提前寫入了)

2
4
6

最后給一下code,結合著注釋著看應該回好一些~

  • 1.1,1.2, 1.3
# 通過sys實現鍵盤輸入讀取
# 注意sys讀取輸入為字符串形式,即會在外面套上''
import sys
import json# 1. sys讀取一/多行輸入
# input_ = sys.stdin.read().strip()  # 一次性讀取多行內容并合并成一個字符串
# input_ = sys.stdin.readline()  # 一次讀取一行,會帶上(首尾的)行結束符/行回車符
input_ = sys.stdin.readline().strip()  # 刪去首尾的空格符(一般都用這個)
# input_ = input()  # (不建議)多行情況下很不方便,單行等效于sys.stdin.readline().strip()print(input_)  # "abcde" | 'abcde'  <這里實際上是'"abcde"',字符串顯示是不顯示外層的雙引號 | 如果輸入是'abcde',則實際上是"'abcde'">
print(repr(input_))  # 驗證一下有沒有嵌套字符串,
print(type(input_))  # str
# 平常我們以為英文單引號,雙引號是一樣的即.split('"')?=.split("'")), 其實不一樣,內層的' or "才是split的分割字符
# 還有一個細節是split的對象是字符串的內層,也就是打印出來的我們看到的那一部分
# 最難崩的一點是如果split生效,結果會在外層再套上一層''(注意這里不管內層是''還是""最后都會套上'')
# 這里split生效指的是分割字符存在于字符串的內層,如'"abcde"'.split('"')就會生效,否則會返回只包含字符串整體(即包含外層)的列表
print(input_.split('"'))  # ['', 'abcde', ''] | ["'abcde'"]
print(input_.split("'"))  # ['"abcde"'] | ['', 'abcde', '']
print(input_.split(','))"""
--例1【數字】:
123
123        <這里實際上是'123',數據類型是str>
'123'
<class 'str'>
['123']
['123']
['123']--例2【嵌套字符串】:
"abcde"  | 'abcde'
"abcde"    <這里實際上是'"abcde"',字符串顯示是不顯示最外層的雙引號> | <如果輸入是'abcde',則實際上是"'abcde'">
<class 'str'>
'"abcde"'  |   "'abcde'"
['', 'abcde', '']  |  ["'abcde'"]
['"abcde"']  | ['', 'abcde', '']
['"abcde"']  | ["'abcde'"]--例三【混合情況】:
由兩部分構成,第一部分是字符串"abcde",第二部分是字符串列表["a", "b", "c", "d", "e"],中間用英文,隔開
"abcde",["a", "b", "c", "d", "e"]  <實際上是'"abcde",["a", "b", "c", "d", "e"]'>
'"abcde",["a", "b", "c", "d", "e"]'
<class 'str'>
['', 'abcde', ',[', 'a', ', ', 'b', ', ', 'c', ', ', 'd', ', ', 'e', ']']
['"abcde",["a", "b", "c", "d", "e"]']  <只包含字符串整體(即包含外層)的列表>
['"abcde"', '["a"', ' "b"', ' "c"', ' "d"', ' "e"]']
包含6個元素'"abcde"'和'["a"' 和 ' "b"' 和 ' "c"' 和 ' "d"' 和 ' "e"]'  (這里是因為列表中的字符串元素也是用英文,分割的,且,后有空格)
"""
  • 1.3解法
# 從標準輸入讀取內容并去除首尾空白
input_data = sys.stdin.readline().strip()# 分割輸入為兩部分(字符串部分和列表部分)
# 找到第一個點是第一個逗號,確保只在列表內部
split_index = input_data.find(',')
# print(repr(input_data[:split_index]))  # '"abcde"'
str_part = input_data[:split_index].strip('"')  # 提取字符串部分并去除引號
list_part_str = input_data[split_index+1:]      # 提取列表部分的字符串# 將列表部分的字符串解析為Python列表
list_part = json.loads(list_part_str)# 輸出結果及類型驗證
print("字符串部分:", str_part)
print("字符串部分整體:", repr(str_part))
print("字符串部分類型:", type(str_part))
print("列表部分:", list_part)
print("列表部分整體:", repr(list_part))
print("列表部分類型:", type(list_part))"""
字符串部分: abcde
字符串部分整體: 'abcde'
字符串部分類型: <class 'str'>
列表部分: ['a', 'b', 'c', 'd', 'e']
列表部分整體: ['a', 'b', 'c', 'd', 'e']
列表部分類型: <class 'list'>
"""
  • 2
# 算法示例題(用sys讀取多行輸入)
# 題目:第一行是數據的組數,接下來每一行都有倆整數(空格隔開),求每一行倆整數和
n = int(sys.stdin.readline().strip())  # 得到第一行數據,即數據組數(下面一共有多少行)
for _ in range(n):pair = sys.stdin.readline().strip()  # 開始讀空格隔開的整數對num1, num2 = int(pair.split()[0]), int(pair.split()[1])print(num1 + num2)"""
--測試樣例:
3
1 1
2 2
3 3--輸出:
2
4
6
"""

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93583.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

近閾值技術引領者:STM32U3系列的能效與安全革新

引言 當電池供電設備已深度融入生活的每一個角落&#xff0c;功耗控制與續航能力儼然成為制約技術演進的核心瓶頸。在此背景下&#xff0c;超低功耗新系列STM32U3憑借前沿的近閾值設計理念&#xff0c;為受功耗瓶頸限制的設備提供了突破性解決方案&#xff0c;也為能耗管理開啟…

Vue3 中的 provide 和 inject 詳解:實現跨組件通信

一、provide 和 inject 概述在 Vue3 中&#xff0c;provide 和 inject 是一對用于實現跨層級組件通信的 API&#xff0c;它們解決了 props 需要逐層傳遞的繁瑣問題。1.1 基本概念provide (提供)&#xff1a;在祖先組件中提供數據inject (注入)&#xff1a;在任意后代組件中注入…

Kafka 零拷貝(Zero-Copy)技術詳解

文章目錄1. 什么是零拷貝2. Kafka 如何實現零拷貝2.1 sendfile 系統調用2.2 mmap 內存映射3. 傳統拷貝 vs 零拷貝3.1 傳統文件傳輸流程3.2 零拷貝文件傳輸流程4. Kafka 零拷貝的具體實現4.1 消息消費時的零拷貝4.2 日志段文件的零拷貝5. 零拷貝帶來的性能優勢6. 零拷貝的適用場…

Vue 中 v-for 的使用及 Vue2 與 Vue3 的區別

v-for 基本用法v-for 是 Vue 中用于循環渲染列表的指令&#xff0c;基本語法如下&#xff1a;運行<!-- Vue2 和 Vue3 通用基本語法 --> <div v-for"(item, index) in items" :key"item.id">{{ index }} - {{ item.name }} </div>Vue2 和…

本地搭建dify+deepseek智能體

今天開始搭建智能體&#xff0c;學習一下&#xff0c;也是公司轉型所需。(Windows下的docker安裝給我差點干破防了&#xff0c;安裝了一周docker才成功。我真就要放棄的時候&#xff0c;又意外成功了/(ㄒoㄒ)/~~)0、準備階段 配置Windows10的基本配置。 按下鍵盤Windows鍵&…

網絡常識-SSE對比Websocket

SSE&#xff08;Server-Sent Events&#xff09;和Websocket都是用于實現服務器與客戶端實時通信的技術&#xff0c;但它們的設計理念、通信模式和適用場景有顯著區別。以下從核心差異和適用場景兩方面具體說明&#xff1a; 一、核心區別維度SSE&#xff08;Server-Sent Events…

lamp架構部署wordpress

CentOS 7主機&#xff1a;lamp.example.comIP&#xff1a;192.168.100.101、關閉防火墻與selinux# 關閉防火墻systemctl stop firewalldsystemctl disable firewalld# 關閉selinuxvim /etc/selinux/config # 或vim /etc/sysconfig/selinuxSELINUXdisabled:wq# 重啟reboot 2、開…

DC6v-36V轉3.2V1A恒流驅動芯片WT7017

DC6v-36V轉3.2V1A恒流驅動芯片WT7017WT7017是一款于連續工作模式下的降壓LED恒流轉換器&#xff0c;可驅動單只或多只LED,內置高精度電流檢測器&#xff0c;能通過外置電阻設定輸出電流,開關式1A恒流芯片。軟啟動、高達1MHZ開關頻率,開路保護,輸入范圍在6V-40VDC內都能穩定可靠…

js如何循環HTMLCollection

場景 當使用document.getElementsByClassName方法獲取一個包含DOM節點的集合arr時&#xff0c;正常的forEach和map操作都會報一個arr.map is not a function的錯誤因為這里的arr并不是標準的 數組 (Array)&#xff0c;而是一個 HTMLCollection 解決 使用document.querySelector…

Dart 逆襲之路:Flutter 4.0 如何推動移動端開發變革?

本文深入探討 Dart 語言在 Flutter 4.0 框架下如何推動移動端開發變革。開篇回顧 Dart 誕生背景與初期困境&#xff0c;闡述其在與 Flutter 結合后嶄露頭角。進而詳細剖析 Flutter 4.0&#xff0c;從全新渲染引擎帶來的性能飛躍、豐富實用新組件簡化開發&#xff0c;到手勢系統…

基于MATLAB的卷積神經網絡手寫數字識別

一、系統架構設計 #mermaid-svg-QQU8judlmQgHc2Lh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QQU8judlmQgHc2Lh .error-icon{fill:#552222;}#mermaid-svg-QQU8judlmQgHc2Lh .error-text{fill:#552222;stroke:#5…

從廢棄到珍寶——舊物二手回收小程序系統的價值發現之旅

在我們的生活中&#xff0c;總有一些舊物因為各種原因而被遺棄在角落&#xff0c;它們或許不再新潮&#xff0c;或許不再實用&#xff0c;但它們卻承載著我們的記憶和情感。舊物二手回收小程序系統的出現&#xff0c;讓這些被遺忘的舊物重新煥發了生機&#xff0c;開啟了一段從…

從0開始學習Java+AI知識點總結-16.web基礎知識

一、SpringBoot Web 入門開發SpringBoot 簡化了傳統 Spring 應用的配置流程&#xff0c;通過 "約定大于配置" 的理念實現快速開發。以下是入門核心要點&#xff1a;1. 工程創建與依賴配置工程初始化&#xff1a;通過 Spring Initializr 創建工程&#xff0c;選擇Spri…

代碼隨想錄Day51:圖論(島嶼數量 深搜廣搜、島嶼的最大面積)

一、實戰 99島嶼數量 深搜 99. 島嶼數量 本題中每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成&#xff0c;也就是說斜角度鏈接是不算的。思路是用遇到一個沒有遍歷過的節點陸地&#xff0c;計數器就加一&#xff0c;然后把該節點陸地所能遍歷到的陸地都標記上。在…

讀取數據excel

import pandas as pd from datetime import datetimedef generate_questions():excel_path df pd.read_excel(excel_path)theme []time_list []tag1 []tag2 []tag3 []word_count 800questions []for index, row in df.iterrows():if isinstance(row[時間], datetime):…

前端環境安裝

1.vsCode 下載鏈接&#xff1a;Visual Studio Code - Code Editing. Redefined 添加一個wiz code擴展&#xff08;提示你需要升級的依賴&#xff09; wiz code 使用方法 效果 2.git 下載鏈接&#xff1a;Git - Downloads 先下載 Homebrew&#xff08;https://brew.sh/ &a…

零基礎學Java第十八講---抽象類和接口(3)

續接上一講 目錄 一、內部類 1、內部類的分類 2、靜態內部類 3、實例內部類---未被static修飾的成員內部類 4、局部內部類 5、匿名內部類 二、Object類 1、獲取對象信息 2、equals方法 3、hashcode方法 一、內部類 當?個事物的內部&#xff0c;還有?個部分需要?個…

字節數據流

記錄 干貨&#xff5c;8000字長文&#xff0c;深度介紹Flink在字節跳動數據流的實踐 字節跳動基于Flink的MQ-Hive實時數據集成

Vision Master的C#腳本與opencv聯合編程

需要在VM的C#腳本設置string類型Out變量和float類型OutF變量&#xff0c;python的輸出信息會在Out變量顯示 using System; using System.IO; using Script.Methods; using System.Diagnostics; using System.Net.Sockets; using System.Text; using System.Threading;public pa…

運維工作架構流程搭建

前言 在解決了運維是干什么的&#xff0c;運維的工作的意義后&#xff0c;這一章我們系統性的講講運維工作流程搭建&#xff0c;希望大家能通過我的分享有所收獲&#xff0c;這一章干貨滿滿。 一、網絡服務器架構 按照一般的訪問方式&#xff0c;按照我自己的理解畫了一個網絡服…