好吧,有點混淆了 max 函式,警告,非常混亂(昨天剛開始使用 youtube 和 programiz 學習)
m=input()
k=m.split()
k=list(k)
h1=(max(k))
print (h1)
k.remove(max(k))
h2 =(max(k))
print (h2)
k.remove(max(k))
h3 =(max(k))
print (h3)
k.remove(max(k))
h4 =(max(k))
print (h4)
k.remove(max(k))
h5 =(max(k))
print (h5)
k.remove(max(k))
h1=int(h1)
h2=int(h2)
h3=int(h3)
h4=int(h4)
h5=int(h5)
total=h1 h2 h3 h4 h5
print (total)
給定的輸入是:60 80 100 40 40 0 70 60 90 100 40 0
當然最大 5 值應該是;100 100 90 80 70
但不知何故我的代碼得到了 90 80 70 60 60
有什么地方我搞砸了嗎?
uj5u.com熱心網友回復:
首先,你從 python 開始真的很酷!我相信您錯過的是該函式input回傳一個字串。
如果我們查看行后的結果:
m=input()
k=m.split()
k=list(k) # (This is redundent by the way, split already returns a list)
k = ['60', '80', '100', '40', '40', '0', '70', '60', '90', '100', '40', '0']
如果我們看一下,k我們會看到這是字串的結果 - 該函式max 會在串列中找到最大值,但按字典順序('9' 大于 '1',所以 '90' 大于 '100' )。
為了接收實際的整數最大值,您必須將串列中的值轉換為整數:
[int(x) for x in k]
Out: [60, 80, 100, 40, 40, 0, 70, 60, 90, 100, 40, 0]
希望能幫助到你 :)
uj5u.com熱心網友回復:
您將該max函式應用于字串串列,而不是整數串列。當你這樣做時,它會遍歷每個字母并比較它們,當有贏家時停止。“9”,如字母“9”,排序大于“1”。這就是為什么它將“90”列為大于“100”的原因。如果在比較之前將串列中的元素轉換為整數,則值應該與預期一致。
你可以通過做修復
m=input()
k=m.split()
k=[int(l) for l in k]
h1=(max(k))
# ...
這使用串列理解,以防您還不熟悉它。
uj5u.com熱心網友回復:
您應該熟悉回圈、例外處理以及如何正確管理/驗證用戶輸入。
以下是您如何以更有條理而不是“直線”的方式實作這一點。
筆記:
此代碼的輸出將顯示用戶輸入的最大值的適當串列,但不一定按照輸入的順序。
NINPUTS = 5
while True:
inval = input(f'Enter at least {NINPUTS} numbers separated by whitespace: ')
try:
if len(numList := list(map(int, inval.split()))) < NINPUTS:
raise ValueError('Not enough numbers')
print(sorted(numList)[-NINPUTS:])
break
except ValueError as e:
print(f'{e}. Please try again')
對于“60 80 100 40 40 0 70 60 90 100 40 0”的輸入字串,這將輸出:
[70, 80, 90, 100, 100]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479555.html
標籤:Python python-3.x 列表 最大限度
上一篇:python串列中值的百分比分布
