如何不存储在列表中比较输入的数字
注意:这不是我的作业。我的大学没有教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 个回答
每次我处理输入时,我都会尽量确保不留给人出错的空间,这样就不会出现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)
你可以定义一个叫 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
在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后把这些信息存储到另一个地方。这个过程就像是把水从一个桶倒到另一个桶一样。
有些时候,我们可能会遇到一些问题,比如数据格式不对,或者我们想要的数据没有被正确获取。这就需要我们仔细检查每一步,确保每个环节都没有出错。
在这个过程中,使用一些工具和方法可以帮助我们更高效地完成任务。比如,我们可以使用循环来重复执行某些操作,或者使用条件判断来决定接下来该做什么。
总之,编程就像是在解决一个个小难题,慢慢把它们拼凑在一起,最终完成一个大项目。
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
你的解决方案有几个问题。
- 有个语法错误:在
number=raw_input():
这行代码中多了一个冒号。 raw_input
返回的是字符串,你需要把它转换成int
类型。- 你的循环只会执行一次,因为你一开始是
10
,然后比较10 <= 10
。下一次循环就变成11 <= 10
,所以就结束了。 - 你把奇数和偶数搞混了。
even_number % 2
结果是0
,而odd_number % 2
结果是1
。 - 要找出最大的值,你只需要一个额外的变量来存储它(可以参考我解决方案中的
biggest_number
)。只需要检查这个变量是否比输入的数字小。 - 你又问数字是否是奇数,但其实你应该对每个数字进行测试,只和奇数比较。
一个可行的解决方案是:
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}
替换成第二个,以此类推。
这是正确的代码:
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' 连接,但因为你说你是初学者,所以我写成了这样。