撰寫一個程式,讀取一系列行,每行包含一個非負整數序列,并輸出包含偶數個以 3 結尾的元素的第一行的總和值。如果沒有這樣的行,輸出將為-1。
例如,對于輸入:
23 12 4 25
44 43 23 3 12 8
33 4 9 73 14
88 92 55
輸出將是 133,因為第三行包含 2 個以 3 結尾的數字(33 和 73),而前幾行包含奇數個此類元素(分別為 1 和 3)。因此,第三行是第一個以 3 結尾的偶數個元素。這一行的元素之和為 33 4 9 73 14 = 133
所以,總而言之:
- 輸入是一系列帶有數字的行。每行至少包含一個數字。
- 輸出是第一行中恰好有偶數個以 3 結尾的元素的元素之和,如果沒有這樣的行,則為 -1。
我現在的嘗試是:
import sys
line = sys.stdin.read().split()
# even number of elements ending in 3
for i in range(len(line)): # Make str input int
line[i] = int(line[i])
print(line)
這樣,不同行中的所有整數輸入都存盤在一個串列中。但是我如何能夠區分哪些整數來自第 1 行?還是2?解決方案需要使用 import sys 引數。我的問題是關于如何處理輸入。如何將每行的值存盤在每個串列中?
更新:我正在嘗試一些事情,而不是問題的結果,但可能會清除我想要的東西。
import sys
line = sys.stdin.readline().split() # ['23', '12', '4', '25']
while line != '':
lista_numb = []
for i in line:
if i.endswith('3'):
lista_numb.append(i)
print(lista_numb)
line = sys.stdin.readline().split()
if len(lista_numb)%2 == 0: # even
print(sum(line))
uj5u.com熱心網友回復:
嘗試:
import sys
while True:
# Read a line from stdin and skip the new line character at end of the line
line = sys.stdin.readline().strip('\n')
if line == "":
print(-1)
break
nums = line.split() # split on white space characters
# Calculate amount of numbers ending with '3'
nums_endingwith_3 = sum(1 for num in nums if num.endswith('3'))
if nums_endingwith_3 > 0 and nums_endingwith_3 % 2 == 0:
print( sum(int(num) for num in nums) )
break # exit the while True loop
上面的代碼進入了一個無限回圈(while True:),從標準輸入獲取單行輸入,并sys.stdin.readline().strip('\n')在輸入字串末尾去除新行作為.readline()回傳行,包括換行符。
這回答了您關于如何獲得單行輸入的問題。
在無限回圈中,該break命令在檢測到以“3”結尾的偶數行后停止回圈運行。列印請求的總和之前的行break,如果在回圈體代碼塊之后還有一些其他代碼,它將被執行,因為break不僅停止回圈,還會導致退出回圈體代碼塊。
if line == "":如果沒有行滿足偶數出現以 '3' 結尾的條件,則條件列印 -1 并以 退出回圈break。
請注意,您需要測驗找到的以“3”結尾的數字的數量是否大于零,以避免在沒有數字以“3”結尾的情況下得到錯誤的結果。這是必需的,因為0 % 2 == 0is True。
如果要分離輸入及其處理,則需要首先在輸入行串列中收集所有輸入,然后按照以下代碼處理這些行:
import sys
lines = []
while True:
line = sys.stdin.readline().strip('\n')
if line == "":
break # end of data input, exit the loop
lines.append(line)
found_sum = None
for line in lines:
nums = line.split() # split on white space characters
# Calculate amount of numbers ending with '3'
nums_endingwith_3 = sum(1 for num in nums if num.endswith('3'))
if nums_endingwith_3 > 0 and nums_endingwith_3 % 2 == 0:
found_sum = sum(int(num) for num in nums)
break # exit the loop
if found_sum != None:
print( found_sum )
else:
print(-1)
uj5u.com熱心網友回復:
好的,首先你需要知道什么sys.stdin.read()型別 --> 這是一個字串。
相關:sys.stdin 讀什么?
sys.stdin 類似于檔案閱讀器。
對于您的問題,我們可以使用
lines = sys.stdin.readlines()
這將自動將您的輸入拆分為字串串列。
您還可以使用:
lines = sys.stdin.read()
lines = lines.split("\n")
With\n是換行(或 Enter)的特殊字符。
然后嘗試從這里解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525628.html
上一篇:在應用于系列的第(2)輪之后,熊貓保留.998344等值的小數部分
下一篇:線段與共享起點和終點相交
