【问题标题】:Having Trouble converting list to integers and Iterating through the list无法将列表转换为整数并遍历列表
【发布时间】:2019-10-03 18:07:12
【问题描述】:

我正在努力弄清楚如何将列表转换为整数,并在每个元素上迭代一个函数。我希望该函数检查每个元素,并且需要将列表中的每个元素转换为整数。

years = ["25", "1955", "2000", "1581", "1321", "1285", "4365", "4", "1432", "3423", "9570"]
def isLeap():
    year = list(map(int, years))
    if year in years >= 1583:
        print(year, "Is a Gregorian Calendar Year.")
    elif year in years < 1583:
        print(year, "Is not a Gregorian Calendar Year.")
    elif year in years % 400 == 0 or year in years % 4 == 0:
        print(year, "Is a Leap Year.")
    elif year in years % 400 == 1 or year in years % 4 == 1:
        print(year, "Is NOT a Leap Year.")
    else:
        print("Test cannot be performed.")
for i in years:
    isLeap()

【问题讨论】:

  • if year in years &gt;= 1583: 你认为这应该做什么?似乎是forif 的混搭
  • 您已经将其转换为 ints 的列表,就在这里:year = list(map(int, years)) 迭代该列表只需执行 for x in year: ...

标签: python function loops integer


【解决方案1】:

将字符串列表转换为整数列表可以通过列表推导简单地完成:

int_list = [int(year) for year in years]

代码中另一个明显的问题是理解变量的范围并将 args 传递给函数。

如果您迭代多年,则将年份项传递给您的函数并在函数范围内使用

def isLeap(year):
...

for int_year in int_list:
    isLeap(int_year)

【讨论】:

    【解决方案2】:

    您应该在 isLeap 函数之外进行从字符串到 int 的转换:

    for year in map(int, years):

    你的函数应该接受一个年份参数:

    def isLeap(year)

    你的测试应该是:if year &gt;= 1583 # etc.

    但是,这里还有一个逻辑问题:因为您使用的是if/elif,所以您永远无法确定某事是否是闰年,因为您的前两个 if 语句中的一个总是正确的。 (它要么 >= 1583,要么

    【讨论】:

      【解决方案3】:

      鉴于您正在尝试做的事情,我相信这是一种方法,将您传递给函数(以列表格式)的元素的 for 循环与您声明的 if-elif-else 条件相结合。

      years = ["25", "1955", "2000", "1581", "1321", "1285", "4365", "4", "1432", "3423", "9570"]
      def isLeap(years):
          for i in years:
              if int(i) >= 1583:
                  print(i, "Is a Gregorian Calendar Year.")
              elif int(i) < 1583:
                  print(i, "Is not a Gregorian Calendar Year.")
              elif int(i) % 400 == 0 or int(years[i]) % 4 == 0:
                  print(i, "Is a Leap Year.")
              elif int(i) % 400 == 1 or int(years[i]) % 4 == 1:
                  print(i, "Is NOT a Leap Year.")
              else:
                  print("Test cannot be performed.")
      isLeap(years)
      

      输出:

      25 Is not a Gregorian Calendar Year.
      1955 Is a Gregorian Calendar Year.
      2000 Is a Gregorian Calendar Year.
      1581 Is not a Gregorian Calendar Year.
      1321 Is not a Gregorian Calendar Year.
      1285 Is not a Gregorian Calendar Year.
      4365 Is a Gregorian Calendar Year.
      4 Is not a Gregorian Calendar Year.
      1432 Is not a Gregorian Calendar Year.
      3423 Is a Gregorian Calendar Year.
      9570 Is a Gregorian Calendar Year.
      

      【讨论】:

      • 不要循环遍历索引,直接循环遍历列表本身...
      • 谢谢,我专注于其他事情并弄错了。
      猜你喜欢
      • 2019-12-20
      • 2017-06-11
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多