[英]Python program works with raw_input() but not with sys.stdin.readline
我正在為即將舉行的編碼競賽從NiO做一些練習任務。 比賽在線進行,迫使我使用stdin.readline,以便他們可以測試我的代碼。 使用stdin確實使我陷入困境。 該腳本使用raw_input可以完美運行,但是每當我切換到sys.stdin.readline時,都會引發“ ValueError:未找到子字符串”。 我做錯了什么嗎?
import string
import sys
n = int(sys.stdin.readline())
txt = sys.stdin.readline()
ab = string.ascii_uppercase
result = ""
for letter in txt:
result += ab[((ab.index(letter) + n) % 26)]
print result
readline()
將返回整行,包括結尾的換行符。 由於\\n
在ascii_uppercase
不存在, ascii_uppercase
會出現錯誤。
使用txt = sys.stdin.readline().strip()
,錯誤應消失。
代碼的根本缺陷在於,您不清理輸入內容,最后得到一個非法字符( \\n
)。 操作ab.index(...)
假定所有輸入均為大寫字母,因此在輸入不是大寫字母時會失敗。
您可以通過兩種方法解決此問題。 一種是將可以轉換為大寫的所有內容都轉換為大寫,然后將其余部分保持原樣:
import string, sys
ab = string.ascii_uppercase
n = int(sys.stdin.readline())
txt = sys.stdin.readline()
result = [ab[(ab.index(letter.upper()) % n) % 26] for letter in txt if letter.isalpha() else letter]
或者,您可以丟棄所有非大寫的輸入:
import string, sys
ab = string.ascii_uppercase
n = int(sys.stdin.readline())
txt = sys.stdin.readline()
result = [ab[(ab.index(letter) % n) % 26] for letter in txt if letter.isupper()]
您可以使用這些方法的多種組合。
順便說一句,如果您想提示輸入,請使用print
with end=''
:
print('How far to shift? ', end='')
n = int(sys.stdin.readline())
print('Text to encode? ', end='')
txt = sys.stdin.readline()
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.