2014-09-03 98 views
2

注意:這不是我的作業。 Python沒有在我的大學裏任教,所以我正在MITOCW做我自己的工作。如何比較輸入的數字而不將它們存儲在列表中

到目前爲止,我已經覆蓋while循環,輸入&打印

Q)編寫一個程序,詢問輸入10個整數,然後打印已輸入的最大奇數。如果沒有輸入奇數,它應該打印一條消息來生效

如何比較這些10號碼而不將它們存儲在某個列表或其他內容中?因爲我還沒有覆蓋,如果還沒有。

print "Enter 10 numbers: " 
countingnumber=10 
while countingnumber<=10: 
    number=raw_input(): 
    if number % 2 == 0: 
     print "This is odd" 
     countingnumber=countingnumber+1 
    else: 
     print "This is even. Enter the odd number again" 

我覺得程序看起來像這樣。但是這有一些未知的錯誤&我怎樣才能比較所有的數字來獲得最大的奇數沒有存儲在列表中的10個數字。

+2

*「有一些未知錯誤」 * - 我們未知的,但你必須回溯閱讀。您至少需要存儲兩個數字 - 當前輸入和迄今爲止最大的奇數。學習列表;他們並不那麼複雜。 – jonrsharpe 2014-09-03 14:14:07

+0

也'raw_input()'給你一個字符串,所以'number%2'不會按照你想要的方式工作,除非你首先將'number'轉換爲數字。像'int(raw_input())'。你也有奇怪的,甚至倒退。 3是奇數,3%2是1. – Dan 2014-09-03 14:15:44

+0

@jonrsharpe我要去學習他們,但是這個問題是在練習的第一章。我如何用有限的知識來解決這個問題,if-else和輸入語句:( – user3995169 2014-09-03 14:19:12

回答

1

這裏是正確的代碼:

print "Enter 10 numbers: " 
countingnumber=1 
MAX=-1 
while countingnumber<=10: 
    number=int(raw_input()) 
    if number%2==1: 
     if number>MAX: 
      MAX=number 
if MAX==-1: 
    print "There Weren't Any Odd Numbers" 
else: 
    print MAX 

這裏有一些注意事項你的錯誤:
1 - 你應該使用INT()函數和列調用後被棄原始輸入整數函數是不需要的,因此語法錯誤
2-你的while循環只迭代一次,因爲你的初始計數數是10,並且在一次迭代之後它將大於10並且同時正文將被跳過。
3 - 偶數是除2之外沒有提醒的數字,但您完全相反地寫出來。你不需要在while循環中打印任何東西,你應該打印最大的奇數或打印「There are no Any Odd Numbers」。
5-需要一個額外的變量來保存MAX的最大奇數。
最後一點:在上面提供的代碼中,您可以將while循環中的兩個if組合成一個使用'和'的循環,但既然您說過我是初學者,我就是這樣寫的。

+0

先生,如果你的最後一個條件{if max = -1:}不應該是{if max == -1}? – user3995169 2014-09-04 09:17:18

+0

你是絕對正確的,我編輯它 – Amen 2014-09-04 10:32:53

2
print "Enter 10 numbers: " 
countingNumber = 1 
maxNumber = 0 
while countingNumber<=10: 
     number=int(raw_input()) 
     if (number % 2 == 0): 
       countingNumber = countingNumber+1 
         if (maxNumber < number): 
           maxNumber = number 
     else: 
       print "This is even. Enter the odd number again" 
print "The max odd number is:", maxNumber 
2

在您的解決方案中有多個缺陷。

  1. 語法錯誤:冒號number=raw_input():
  2. raw_input返回一個字符串,您必須將其轉換爲int
  3. 您的while循環只運行一次,因爲您從10開始並比較10 <= 10。在下一次迭代中,它將是11 <= 10並完成。
  4. 你也有奇怪的偶然。 even_number % 2給出0odd_number % 2給出1
  5. 要獲得最大的價值,您只需要一個額外的變量來存儲它(請參閱我的解決方案中的biggest_number)。只要測試這個變量是否小於輸入值。
  6. 您再次詢問該數字是否爲奇數,但您應該記下每個數字並僅針對奇數進行測試。

一個可行的解決方案是:

print "Enter 10 numbers" 

count = 0 
max_numbers = 10 
biggest_number = None 

while count < max_numbers: 
    number=int(raw_input("Enter number {0}/{1}: ".format(count + 1, max_numbers))) 
    if number % 2 == 1: 
     if biggest_number is None or number > biggest_number: 
      biggest_number = number 

    count += 1 

if biggest_number is None: 
    print "You don't entered a odd number" 
else: 
    print "The biggest odd number is {0}".format(biggest_number) 

如果你想知道什麼串檢取的docs一看之後的格式是做。簡而言之:它用,{1}中的第一個語句替換{0},第二個等等。

2

你可以定義一個maxnum變量並保存最大值!你也必須使用int(raw_input())代替raw_input()

print "Enter 10 numbers: " 
maxnum=0 
for i in range(10): 
    number=int(raw_input()) 
    if number%2 == 0: 
     print "This is odd" 
     if number>maxnum: 
     maxnum=number 
    else: 
     print "This is even. Enter the odd number again" 
print "max odd is :{0}".format(maxnum) 

DEMO:

Enter 10 numbers: 
2 
This is odd 
4 
This is odd 
6 
This is odd 
8 
This is odd 
12 
This is odd 
14 
This is odd 
16 
This is odd 
100 
This is odd 
2 
This is odd 
4 
This is odd 
max odd is :100 
+0

'number%2 = = 0'意味着即使 – acushner 2014-09-03 14:39:04

+0

沒有,如果你嘗試在python 2.7中得到這個錯誤:'不是所有在字符串格式化過程中轉換的參數 ' – Kasramvd 2014-09-03 14:42:34

+0

不,這意味着這個數字是一個字符串(在你的測試中) – acushner 2014-09-03 14:43:38

2

每當我做的投入,我想確保我不留有餘地人爲錯誤給我的錯誤。

因爲我把額外的檢查,我把代碼分解成許多單獨的功能。這也爲代碼提供了非耦合的質量。即)你可以在其他程序中重複使用它!

def input_number(): 
    while true: 
     input = raw_input("Enter Value: ") 
     if not input.isdigit(): 
      print("Please enter numbers only!") 
     else: 
      return int(input) 

以這種方式設計輸入函數使代碼沒有機會崩潰。我們現在可以在函數中使用它來獲得奇數!

def input_odd_number(): 
    while true: 
     input = input_number() 
     if input % 2 == 0: 
      print("Please enter odd numbers only!") 
     else: 
      return input 

現在我們終於可以進入主代碼。我們知道我們需要十個數字,所以讓我們做一個for循環。我們現在也需要我們守住最大奇數,所以讓我們做一個變量來保存該值

def largest_odd(count = 10): // its always nice to make variables dynamic. The default is 10, but you can change it when calling! 
    max_odd = input_odd_number() // get the first odd number 
    for i in range(count - 1): // we already found the first one, so we need 1 less 
     new_odd = input_odd_number() 
     if new_odd > max_odd: 
      max_odd = new_odd 
    print("The largest odd value in '{}' inputs was: {}".format(count, max_odd) 
相關問題