如何不存储在列表中比较输入的数字

2 投票
5 回答
1550 浏览
提问于 2025-04-19 14:35

注意:这不是我的作业。我的大学没有教Python,所以我正在自己从MIT的公开课程学习。

到目前为止,我已经学习了while循环、输入和输出。

问题)写一个程序,让用户输入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个数字存储在列表中的情况下,比较所有数字以找出最大的奇数呢?

5 个回答

2

每次我处理输入时,我都会尽量确保不留给人出错的空间,这样就不会出现bug。

因为我添加了额外的检查,所以我把代码拆分成很多独立的函数。这样做的好处是代码之间没有紧密联系,也就是说,你可以在其他程序中重复使用这些代码!

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

现在我们终于可以进入主代码部分了。我们知道需要十个数字,所以我们来写一个循环。同时,我们也知道需要保存最大的奇数,所以我们需要一个变量来存这个值。

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)
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)

示例:

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
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. 你的循环只会执行一次,因为你一开始是 10,然后比较 10 <= 10。下一次循环就变成 11 <= 10,所以就结束了。
  4. 你把奇数和偶数搞混了。even_number % 2 结果是 0,而 odd_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)

如果你想知道字符串后面的格式是干嘛的,可以看看 文档。简单来说:它会把 {0} 替换成 format 中的第一个值,把 {1} 替换成第二个,以此类推。

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,这样 while 循环的内容就会被跳过。
3- 偶数是指能被 2 整除没有余数的数字,但你写的正好相反。
4- 在 while 循环里你不需要打印任何东西,你应该打印出最大的奇数,或者打印“没有奇数”。
5- 你需要一个额外的变量来保存最大的奇数,这个变量叫 MAX。
最后一点:在上面的代码中,你可以把 while 循环里的两个 if 语句合并成一个,用 'and' 连接,但因为你说你是初学者,所以我写成了这样。

撰写回答