繁体   English   中英

Python,最大奇数

[英]Python, largest odd integer

我是编码新手,现在已经学习了几天。 我用 Python 编写了这个程序,同时跟随了一些 MIT OpenCourseware 讲座和几本书。 反正有更容易表达的程序吗?

手指练习:编写一个程序,要求用户输入 10 个整数,然后打印输入的最大奇数。 如果没有输入奇数,它应该打印一条消息。

a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))

if a%2 ==0:
    a = 0  
else:
    a = a 
if b%2 ==0:
    b = 0 
else:
    b = b
if c%2 ==0:
    c = 0
else:
    c = c 
if d%2 ==0:
    d = 0
else:
    d = d
if e%2 ==0:
    e = 0
else:
    e = e
if f%2 ==0:
    f = 0
else:
    f = f
if g%2 ==0:
    g = 0
else:
    g = g
if h%2 ==0:
    h = 0
else:
    h = h
if i%2 ==0:
    i = 0 
else:
    i = i 
if j%2 ==0:
    j = 0  
else:
    j = j

value = a, b, c, d, e, f, g, h, i, j
max = max(value)
if max ==0:
    print 'There are no odd numbers.'
else: 
    print max, 'is the largest odd integer.'

更紧凑的形式是:

from __future__ import print_function
try:  # Python 2
    raw_input
except NameError:  # Python 3 compatibility
    raw_input = input

largest = None

for i in range(1, 11):
    number = int(raw_input('Enter integer #%d: ' % i))
    if number % 2 != 0 and (not largest or number > largest):
        largest = number

if largest is None:
    print("You didn't enter any odd numbers")
else:
    print("Your largest odd number was:", largest)

这使用一个简单的循环来跟踪输入了多少整数,但只存储迄今为止遇到的最大奇数。

numbers = [input('Enter a number: ') for i in range(10)]
odds = [x for x in numbers if x % 2 == 1]
if odds:
    print max(odds)
else:
    print 'No odd numbers input'

解释:

numbers = [input('Enter a number: ') for i in range(10)]

此行使用列表推导向用户询问 10 个数字。 这些数字将在列表对象numbers

odds = [x for x in numbers if x % 2 == 1]

接下来,我们使用另一个列表推导来过滤掉所有非奇数中的numbers 由于奇数2 始终等于 1,因此我们得到一个仅包含奇数的新列表( odd )。

if odds:

这是使用python的真实测试方式。 特别是,如果列表为空,则为False 如果列表不为空,则为True

print max(odds)

最后,如果上面是True ,我们打印odds列表中的max

else:
    print 'No odd numbers input'

如果if语句为False (没有几率),我们会告诉用户


运行副本如下所示:

Enter a number: 10
Enter a number: 12
Enter a number: 14
Enter a number: 15
Enter a number: 16
Enter a number: 17
Enter a number: 1
Enter a number: 2
Enter a number: 19
Enter a number: 2
19

Python 有称为listtuple的对象,它们表示数字序列——它们的用途与其他编程语言中的“数组”有许多相同的用途。 list的示例是[1,2,3,4,5]

像大多数流行的编程语言一样,Python 也有for循环的概念。

myList = [1,2,3,4,5]
for x in myList:
    print(x)

Python 还有一个有点不寻常但非常有用的结构,称为“列表推导”,它以一种简洁的语法结合了for循环、 list和一个可选的条件——看看这些例子,看看你是否能理解结果与代码的关系

myNewList = [x+1 for x in myList]
myNewSelectiveList = [x+1 for x in myList if x >= 3]

这是一个对你的练习特别有用的例子:

userInputs = [int(raw_input('Enter a number:')) for i in range(10)]

最后,有一个函数max可以将list作为参数并返回列表中最大的项目。 一旦你在一个列表中有 10 个输入,你应该能够使用这些成分在一个非常短的行中找到最高的奇数( max超过一个带有if条件的列表理解)。

我也在从头开始研究 Guttag 的书。 我提供了以下解决方案:

list = []
odds = False

print('You will be asked to enter 10 integer numbers, one at a time.')

for i in range(1,11):
    i = int(input('Number: ')) 
    list.append(i)

list = sorted(list, reverse = True)

for j in list:
    if j%2 == 1:
        print('The largest odd number is', j, 'from', list)
        odds = True
        break

if odds == False:
    print('There is no odd number from', list)

我经历了一个类似于 OP 的长(er)版本,但由于 MIT 6.00x 的阅读清单明确建议在第 2 章旁边学习主题 3.2,我认为这些清单将是一个可以接受的答案。

上面的代码应该允许负数和零。

我也在研究 Guttag 的书,这个解决方案使用了上​​面的一些代码,但可能对事情有不同的看法。 我立即过滤掉了用户输入,只包含奇数输入。 如果所有输入都是偶数,则列表为空,代码检查是否有空列表,然后对剩下的内容(奇数)进行排序并返回最后一个。 请让我知道这是否有任何隐藏的问题(我对编写算法也很陌生)。

arr = []
max = 0

while max < 10:
  userNum = int(input('enter an int: '))
  if userNum %2 != 0:
    arr.append(userNum)
  max = max + 1

if len(arr) == 0:
  print('all are even')

oddArr = sorted(arr)
print(oddArr[-1])

我只是在寻找替代答案时发现了这个问题,这是我的代码:

注意:我稍微更改了代码,因此我可以决定要输入多少个数字

alist=[]
olist=[]
num=int(input("how many numbers ? :  "))

for n in range(num):
        numbers=int(input())
        alist.append(numbers)

for n in range(len(alist)):
    while alist[n]%2 != 0 :
        olist.append(alist[n])
        break
    else:
        n +=1

olist.sort()
if len(olist) != 0:
    print("biggest odd number:  ",olist[-1])
else:
    print("there is no odd number ")

这个问题在本书中很早,并且假设不了解列表,或者实际上是 Nonetype (它已经提到它但没有解释它是如何使用的)。 此外,如果最高奇数为负数,此处的某些解决方案将不起作用,因为它们在循环之前初始化最大 = 0。

这有效:

iters = 10
largest = "spam"

while iters != 0:
    user_num = int(input("Enter an integer: "))
    if user_num % 2 != 0:
        if largest == "spam" or user_num > largest:
            largest = user_num
    iters -= 1
    
if largest == "spam":
    print("You did not enter an odd integer")
else:
    print("The largest odd integer was", largest)
itersLeft = 10 #define number of integers
x=0 #creating a variable for storing values
max=0 #creating a variable for defining max
while itersLeft!=0:
  x=int(input())
  itersLeft = itersLeft-1
  if x%2!=0 and x>max:
    max=x
if max!=0:
  print(max)
elif max==0:
  print("No odd number was entered")  

*注意:仅适用于非负数

建议列表和循环的其他答案和评论要好得多,但它们并不是更改和缩短代码的唯一方法。

在您的测试中, else: a = a部分什么都不做,将a分配给自身并没有改变,因此它们都可以被删除,并且if测试分别放在一行:

a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))

if a%2 == 0: a = 0  
if b%2 == 0: b = 0 
if c%2 == 0: c = 0
if d%2 == 0: d = 0
if e%2 == 0: e = 0
if f%2 == 0: f = 0
if g%2 == 0: g = 0
if h%2 == 0: h = 0
if i%2 == 0: i = 0 
if j%2 == 0: j = 0  

value = a, b, c, d, e, f, g, h, i, j
max = max(value)
if max ==0:
    print 'There are no odd numbers.'

这是最明显的变化,使它更容易遵循,而不会从根本上改变你正在做的事情的模式。

之后,您可以通过多种方式重写它 - 例如,仅保留数学,偶数除以 2 余数为 0,奇数数余数为 1。这样做(x % 2) * x会将偶数变为 0,但保持奇数相同。

所以你可以替换所有的 if 测试,没有测试,只是一个赋值:

a = (a % 2) * a  
b = (b % 2) * b
c = (c % 2) * c
...
if e%2 == 0: e = 0
if f%2 == 0: f = 0

这些线会稍微短一些,如果您对它的工作方式感到满意,您可以将它们合并到value线中,并将其直接放入max以获得:

a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))

largest = max(a%2*a, b%2*b, c%2*c, d%2*d, e%2*e, f%2*f, g%2*g, h%2*h, i%2*i, j%2*j)

if largest == 0:
    print 'There are no odd numbers.'
else: 
    print largest, 'is the largest odd integer.'

没有办法在没有某种循环的情况下缩短分配十个变量的时间,而且这是否“更容易表达程序”是有争议的,但它确实需要 58 行到 17 行,删除 10 个条件测试,10 else/no-op assignments 和 1 个变量,同时保持大致相同的结构/工作方式。

PS。 我更改了max = max()因为用与函数相同的名称调用变量是一个坏主意 - 你不能再次使用该函数,并且它会让其他 Python 程序员在阅读你的代码时感到困惑,他们已经知道 'max' 做了什么,如果您将该名称用于其他用途。

编辑:评论员建议负数很重要。 上面的写作回答“这是我的代码,我怎样才能更容易地表达它?” 没有引入任何新的 Python 或改变行为,但它不能处理负奇数; max()将始终选择零而不是负奇数,并且程序将错误地回答“没有奇数”。

如果不引入任何新概念,我认为这是无法解决的。 如果正在引入新概念,请使用列表和循环 Andy 建议构建一个仅包含奇数的列表,然后取其中的最大值。

但是,在没有列表的情况下做一些事情来处理它们——还有另一种方法几乎不会改变代码的形状,它引入了布尔OR操作,它比较两个真/假值,如果它们都是假的,则返回假,否则返回真.

Python 在幕后进行了大量自动转换为真/假,以使逻辑运算符正常工作。 没有值的变量(零、空容器、空字符串)都是“假”,而有一些值的变量都是“真”。

从前面开始,我们有一个位将偶数敲为零( a%2*a ),现在我们想要将数字线完全敲零:

-3 or None -> -3
-1 or None -> -1
 0 or None -> None
 1 or None ->  1
 3 or None ->  3
 5 or None ->  5

介绍: a%2*a or None 它神奇、丑陋、难以理解,但却是有效的 Python —— 我很高兴,因为它就像解决一个难题,而且它有效,你知道吗? 将最大线和测试更改为:

largest = max(a%2*a or None, b%2*b or None, c%2*c or None, d%2*d or None, e%2*e or None,
              f%2*f or None, g%2*g or None, h%2*h or None, i%2*i or None, j%2*j or None)

if largest == None:

偶数被压成零,零被压成零,赔率不变。 Max现在只能处理奇数,因此它现在可以选择一个负奇数作为答案。 结案。 顺便提一句。 使用列表。

比较 10 个输入并打印最大的奇数

y = 0
for counter in range(10):
    x = int(input("Enter a number: "))
    if (x%2 == 1 and x > y):
        y = x

if (y == 0):
    print("All are even")
else:
   print(y, "is the largest odd number")

尝试以下 -

def largest_odd():
    q = int(input('Please enter a number: '))
    w = int(input('Please enter a number: '))
    e = int(input('Please enter a number: '))
    lis = []
    if q%2 != 0:
        lis.insert (q,q)
    if w%2 != 0:
        lis.insert (w,w)
    if e%2 != 0:
        lis.insert (e,e)
    Great = max(lis)
    print(Great)

我刚才在做同样的练习,并提出了以下解决方案,它似乎工作得很好,并且与迄今为止书中教授的主题一致(变量赋值、条件和 while 循环):

练习:编写一个程序,要求用户输入 10 个整数,然后打印输入的最大奇数。 如果没有输入奇数,它应该打印一条消息。

from __future__ import print_function
try:  # Python 2
    raw_input
except NameError:  # Python 3 compatibility
    raw_input = input


numbers_count = 0
next_input = 0

max_odd_number = None


while numbers_count < 10:
    numbers_count += 1
    next_input = raw_input("Please enter a number: " + str(numbers_count) +
        " of 10\n")

    if int(next_input)%2 != 0:
        # on the entry of first number, we check max_odd_number - if it is of
        # type None, it means no value has been assigned to it so far thus the
        # first odd number entry becomes the first maximum odd number, be it
        # positive or negative.
        if max_odd_number == None:
            max_odd_number = int(next_input)

        if int(next_input) > max_odd_number:
            max_odd_number = int(next_input)


if max_odd_number == None:
    print ("None of the numbers entered were odd!")
else:
    print ("Maximum odd number you entered is: " + str(max_odd_number))

任何意见将不胜感激。

谢谢

一个简单的答案是:

x = 0
result = None;
while(x < 10):
  inputx = raw_input('Enter integer #%d: ' % x)
  inputx = int(inputx)
  if (inputx % 2 == 1):
    if(inputx > result):
       result = inputx
  x += 1
if result is None:
  print 'no odd number was entered'
else:
  print result

注意:如果输入一个像'3f'这样的字符串,它会抛出一个ValueError:

invalid literal for int() with base 10: '3f'

所以最后,最好的答案是

result = None
x = 0
while(x < 10):
  inputx = raw_input('Enter integer #%d: ' % x)
  try:
    inputx = int(inputx)
  except ValueError:
    print'you enter value ',inputx,' is not a Integer. please try again!'
    continue
  if (inputx % 2 == 1):
    if(inputx > result):
       result = inputx
  x+=1
if result is None:
  print 'no odd number was entered'
else:
  print 'the largest odd number is: ',result

if 条件while 迭代语句的知识在书中介绍的问题。

尽管有很多数据类型可以在 python 中使用以获得简单的解决方案,但我们只需要使用非常基础的原语。

下面的代码接受 10 个用户输入(只有奇数)并输出 10 个数字中最大的一个。

问题答案:(代码)

a1= int(input("Enter the number1: "))
while a1%2 ==0:
    print("Entered number is not an odd number.")
    a1= int(input("Enter the number1: "))
a2= int(input("Enter the number2: "))
while a2%2 ==0:
    print("Entered number is not an odd number.")
    a2= int(input("Enter the number2: "))
a3= int(input("Enter the number3: "))
while a3%2 ==0:
    print("Entered number is not an odd number.")
    a3= int(input("Enter the number3: "))
a4= int(input("Enter the number4: "))
while a4%2 ==0:
    print("Entered number is not an odd number.")
    a4= int(input("Enter the number4: "))
a5= int(input("Enter the number5: "))
while a5%2 ==0:
    print("Entered number is not an odd number.")
    a5= int(input("Enter the number5: "))
a6= int(input("Enter the number6: "))
while a6%2 ==0:
    print("Entered number is not an odd number.")
    a6= int(input("Enter the number6: "))
a7= int(input("Enter the number7: "))
while a7%2 ==0:
    print("Entered number is not an odd number.")
    a7= int(input("Enter the number7: "))
a8= int(input("Enter the number8: "))
while a8%2 ==0:
    print("Entered number is not an odd number.")
    a8= int(input("Enter the number8: "))
a9= int(input("Enter the number9: "))
while a9%2 ==0:
    print("Entered number is not an odd number.")
    a9= int(input("Enter the number9: "))
a10= int(input("Enter the number10: "))
while a10%2 ==0:
    print("Entered number is not an odd number.")
    a10= int(input("Enter the number10: "))

if a1>a2 and a1>a3 and a1>a4 and a1>a5 and a1>a6 and a1>a7 and a1>a8 and a1>a9 and a1>a10:
    print(str(a1) +" is the largest odd number.")
elif a2>a1 and a2>a3 and a2>a4 and a2>a5 and a2>a6 and a2>a7 and a2>a8 and a2>a9 and a2>a10:
    print(str(a2) +" is the largest odd number.")
elif a3>a1 and a3>a2 and a3>a4 and a3>a5 and a3>a6 and a3>a7 and a3>a8 and a3>a9 and a3>a10:
    print(str(a3) +" is the largest odd number.")
elif a4>a1 and a4>a2 and a4>a3 and a4>a5 and a4>a6 and a4>a7 and a4>a8 and a4>a9 and a4>a10:
    print(str(a4) +" is the largest odd number.")
elif a5>a1 and a5>a2 and a5>a3 and a5>a4 and a5>a6 and a5>a7 and a5>a8 and a5>a9 and a5>a10:
    print(str(a5) +" is the largest odd number.")
elif a6>a1 and a6>a2 and a6>a3 and a6>a4 and a6>a5 and a6>a7 and a6>a8 and a6>a9 and a6>a10:
    print(str(a6) +" is the largest odd number.")
elif a7>a1 and a7>a2 and a7>a3 and a7>a4 and a7>a5 and a7>a6 and a7>a8 and a7>a9 and a7>a10:
    print(str(a7) +" is the largest odd number.")
elif a8>a1 and a8>a2 and a8>a3 and a8>a4 and a8>a5 and a8>a6 and a8>a7 and a8>a9 and a8>a10:
    print(str(a8) +" is the largest odd number.")
elif a9>a1 and a9>a2 and a9>a3 and a9>a4 and a9>a5 and a9>a6 and a9>a7 and a9>a8 and a9>a10:
    print(str(a9) +" is the largest odd number.")
else:
    print(str(a10) +" is the largest odd number.")

希望这可以帮助。

以我的经验,更容易表达程序的方法是使用函数。 这将是我在为 Python 3.7.6 测试的语法中的答案:

'''
Finger exercise: 
    Write a program that asks the user to input 10 integers, 
    and then prints the largest odd number that was entered. 
    If no odd number was entered, it should print a message to that effect.
'''

def LargestOdd(numbers=[]):
    '''
    Parameters
    ----------
    numbers : list, whcih should contain 10 integers.
        DESCRIPTION. The default is [].

    Returns
    -------
    The largest odd integer in the list number.

    '''
    odd_numbers=[]
    if len(numbers)==10:
        for n in numbers:
            
            if n%2 != 0:
                odd_numbers.append(n)
                max_numb=max(odd_numbers)
        print('The largest odd number is '+str(max_numb))
    else:
        print('Please, enter 10 numbers')
        
        
    
LargestOdd([1,2,3,7,45,8,9,10,30,33]) 

输出:最大的奇数是 45

n = int(input("Enter the no of integers:"))
lst = []
count = 1
while count <=n:
    no = int(input("Enter an integer:"))
    count = count +1
    if (no%2!=0):
        lst.append(no)
print ("The list of odd numbers",lst)
print("The maximum number from the list of odd number is:",max(lst))        
    

这是我的解决方案:

def max_odd():
    """Returns largest odd number from given 10 numbers by the use.
    if the input is not valid, the message is displayed to enter valid numbers"""
    x = [input('Enter a value: ') for i in range(10)]
    x = [int(i) for i in x if i]
    if x:
        try:
            x = [i for i in x if i%2 != 0]
            return(max(x))
        except:
            return('All even numbers provided.')
    else:
        return('Please enter a valid input')

我开始从 Guttag 的书中学习编码。 由于这是在第 2 章中,因此解决方案仅遵循基本的if条件和while循环

#input 10 integers
n1 = int(input('Enter 1st integer: '))
n2 = int(input('Enter 2nd integer: '))
n3 = int(input('Enter 3rd integer: '))
n4 = int(input('Enter 4th integer: '))
n5 = int(input('Enter 5th integer: '))
n6 = int(input('Enter 6th integer: '))
n7 = int(input('Enter 7th integer: '))
n8 = int(input('Enter 8th integer: '))
n9 = int(input('Enter 9th integer: '))
n10 = int(input('Enter 10th integer: '))

#create list from input
list = [n1,n2,n3,n4,n5,n6,n7,n8,n9,n10]
largest = list[0] #Assign largest to the first integer
x = 1 #index starts at 1
while x < len(list):
  if list[x]%2 != 0:
    if list[x] > largest:
      largest = list[x]
  x += 1
if largest%2 == 0:
  print('All numbers are even')
else:
  print('Largest odd number is', largest)

这段代码也应该可以工作。 针对 python 2.7 测试的语法

 def tenX():  #define function
    ten = [] #empty list for user input
    odds = [] #empty list for odd numbers only
    counter = 10
    ui = 0
    while counter > 0 :
        ui = raw_input('Enter a number: ')
        ten.append(int(ui)) #add every user input to list after int conversion
        counter -= 1
    for i in ten:
        if i % 2 != 0:
        odds.append(i)
    print "The highest number is", max(odds) #max() returns highest value in a list

>>> tenX() #call function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM