首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码在使用for循环时无法获得列表上的最后一项?

为什么我的代码在使用for循环时无法获得列表上的最后一项?
EN

Stack Overflow用户
提问于 2022-11-12 17:34:50
回答 3查看 49关注 0票数 0

我编写了一个程序来比较数字,并得到每对夫妇中最小的一个。输入的第一个数字是对配对的计数,其他的是只需2乘2与彼此比较的数字。当我执行并给出输入时,列表中的最后一个数字不包括在内。我想知道为什么和如何解决它。

这是我的密码。

代码语言:javascript
复制
class Solution:

    def __init__(self):
        self.iput = input('Enter the numbers: ')
        self.num_list = self.iput.split() 

    def min_of_two(self):
        result = ''
        for i in range(0,int(self.num_list.pop(0)) * 2 ,2):
            result += str(min(self.num_list[i], self.num_list[i+1])) + ' '
        return result
x = Solution()
x.min_of_two()

当我执行这个并给出输入时

代码语言:javascript
复制
3
5 3
2 8
100 15

输出是

代码语言:javascript
复制
'3 2 100 '

而不是

代码语言:javascript
复制
'3 2 15 '
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-12 17:49:57

在示例代码中不需要手动输入。也没有与类相关的问题,因此跳过这两个问题,只需将输入定义为整数列表:

代码语言:javascript
复制
inp = [3, 5, 3, 2, 8, 100, 15]

尽量保持功能简单,理想情况下只做“一件”事情,例如返回成双成对的迷你表:

代码语言:javascript
复制
def min_of_two(length, pairs):
    res = []
    for i in range(length):
        res.append(min(pairs[i*2], pairs[i*2+1]))
    return res

然后,按照函数需要的格式准备输入,在这里,在调用函数之前将长度分开:

代码语言:javascript
复制
print(min_of_two(length=inp[0], pairs=inp[1:]))

(我还命名了参数,因为inp[0]等是相当神秘的)

如果要将输出作为字符串,则应在运行该函数后将其转换为:

代码语言:javascript
复制
result = min_of_two(length=inp[0], pairs=inp[1:])
text_result = ' '.join(result)
print(text_result)

为了完整..。

输入功能最好位于自己的函数中,完成所有用户交互,并在将输入传递给程序的其他部分之前将输入转换为正确的格式。如果您没有使用对列表的实际长度,而是依赖于用户输入的内容,那么验证输入可能是有用的:

代码语言:javascript
复制
def ask_user_for_list():
    while True:
        iput = input('Enter the numbers: ')
        lst = [int(val) for val in iput.split()]
        if lst[0] == len(lst[1:]) / 2:
            return lst
        print("That doesn't seem right, try again.."

ps:通过步骤使用范围也是非常好的:

代码语言:javascript
复制
    for i in range(0, length*2, 2):
        res.append(min(pairs[i], pairs[i+1])
票数 2
EN

Stack Overflow用户

发布于 2022-11-12 18:02:39

我只需简单地用以下方法修改for循环就可以得到正确的结果

代码语言:javascript
复制
def min_of_two(self):
        result = ''
        for i in range(0,int(self.num_list.pop(0)) * 2 ,2):
            result += str(min(int(self.num_list[i]), int(self.num_list[i+1]))) + ' '
        return result

注意使用一个小的str到int更改的结果。我不知道为什么但它起作用了。

票数 0
EN

Stack Overflow用户

发布于 2022-11-12 18:40:42

我不知道,如果这是真的,,但我猜是因为输入if数字是str,python按数字检查数字

例如:“100”和“15”

1等于1

移动到第二个数字

5大于0

所以15更大

就像我说的,,我不知道,如果我的理论是真的或不,但这是有意义的

这是您的代码:

代码语言:javascript
复制
class Solution:

    def __init__(self):
        self.iput = input('Enter the numbers: ')
        self.num_list = self.iput.split() 
        
    def min_of_two(self):
        result = ''
        for i in range(0,int(self.num_list.pop(0)) * 2 ,2):

            # change self.num_list[i] & self.num_list[i + 1] from str to int
            result += str(min(int(self.num_list[i]), int(self.num_list[i+1]))) + ' '
            
        return result
x = Solution()
print(x.min_of_two())
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74415124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档