Python 计算整数内的单个数字以确定偶数计数

Python 计算整数内的单个数字以确定偶数计数,python,python-3.x,Python,Python 3.x,我应该为其编写代码的程序要求用户输入(可以是十进制,也可以不是十进制),然后该函数应该忽略十进制后的任何数字,并计算整数中有多少数字是偶数。到目前为止,我所做的(我甚至不知道这是否是解决这个问题的最佳或正确的方法)是让用户输入一个字符串,而不是整数或浮点,然后找到小数点并将这个新数字分配给一个新变量。 我遇到的问题是,通过循环每个数字来确定它是否为偶数。它不允许我在循环之前将其转换为整数,因为它说整数不能被迭代,并且当我在循环中进行转换时,它也会给我一个错误 digit_input=(input

我应该为其编写代码的程序要求用户输入(可以是十进制,也可以不是十进制),然后该函数应该忽略十进制后的任何数字,并计算整数中有多少数字是偶数。到目前为止,我所做的(我甚至不知道这是否是解决这个问题的最佳或正确的方法)是让用户输入一个字符串,而不是整数或浮点,然后找到小数点并将这个新数字分配给一个新变量。 我遇到的问题是,通过循环每个数字来确定它是否为偶数。它不允许我在循环之前将其转换为整数,因为它说整数不能被迭代,并且当我在循环中进行转换时,它也会给我一个错误

digit_input=(input("Enter a number:"))

def digit_count(digit_input): 
    i = 0 
    even_count = 0
    start = digit_input.find(".", i)
    new_num=(digit_input[:start])
    while i < len(new_num):
      new=int(new_num[i])
      if new % 2 == 0:
        even_count += 1
        return even_count
      else: 
        break 
      i+=1

print(digit_count(digit_input))
数字输入=(输入(“输入数字”))
def数字计数(数字输入):
i=0
偶数计数=0
开始=数字输入。查找(“.”,i)
新数字=(数字输入[:开始])
而我
我现在拥有的确实告诉我第一个整数是否为偶数。但如果,例如,我输入222,它告诉我只有1个偶数


*****如果有更好的方法,请随时告诉我。我是python新手,这是我唯一能想到的方法

除了肯定有更快或更优雅的方法可以做到这一点之外,下面的更改将修复您的代码。第一个偶数后不返回,继续计数:

while i < len(new_num):
  new = int(new_num[i])
  if new % 2 == 0:
    even_count += 1  # do not return meaningless count now!
  # do not break otherwise, keep counting
  i += 1
return even_count  # but return count after finishing counting

除了肯定有更快或更优雅的方法可以做到这一点之外,下面的更改将修复您的代码。第一个偶数后不返回,继续计数:

while i < len(new_num):
  new = int(new_num[i])
  if new % 2 == 0:
    even_count += 1  # do not return meaningless count now!
  # do not break otherwise, keep counting
  i += 1
return even_count  # but return count after finishing counting

在一个班轮你可以做到这一点

n_even_before_decimal = len(list(x for x in digit_input.split('.')[0] if int(x)%2 == 0))
此代码假定您有用户输入的数字,在
数字输入
变量中有一个小数点作为字符串

解释

列表
函数中的代码只是在“.”之前的所有字符上迭代(表示为
拆分
函数的
[0]
)将它们转换为
int
s,并检查它们是否为偶数。
它将它们全部保存到一个列表中,并在末尾计算长度。

在一行中,您可以这样做

n_even_before_decimal = len(list(x for x in digit_input.split('.')[0] if int(x)%2 == 0))
此代码假定您有用户输入的数字,在
数字输入
变量中有一个小数点作为字符串

解释

列表
函数中的代码只是在“.”之前的所有字符上迭代(表示为
拆分
函数的
[0]
)将它们转换为
int
s,并检查它们是否为偶数。
它会将它们全部保存到一个列表中,并在末尾计算长度。

您不能直接将输入转换为整数,而不是处理小数点吗?提示的一部分希望程序只处理小数点之前的数字。我个人不知道如果我马上把它转换成整数怎么办。如果是,请告诉我,这样我就可以学习了,因为我是python的新手。你能不能直接将输入转换成整数,而不是小数点?提示的一部分希望程序只处理小数点之前的数字。我个人不知道如果我马上把它转换成整数怎么办。如果你这么做了,请告诉我,这样我就可以学习,因为我是新来的蟒蛇。我的意思是,我肯定有更好的方法,但我不知道如何去做。如果你能给我指出正确(或更好)的方向,那就太好了。@NouraAsrar补充了一个简短的解决方案谢谢!但它为什么会对以10为底的int()表示无效的文本:“a”,如果您的输入包含非数字,则会发生这种情况。在这种情况下,
int
转换将失败。我的第二个建议(未注释)在这方面更加有力。我指的是你建议的一行。那个给了我一个错误。我的意思是我肯定有更好的方法,但我不知道如何去做。如果你能给我指出正确(或更好)的方向,那就太好了。@NouraAsrar补充了一个简短的解决方案谢谢!但它为什么会对以10为底的int()表示无效的文本:“a”,如果您的输入包含非数字,则会发生这种情况。在这种情况下,
int
转换将失败。我的第二个建议(未注释)在这方面更加有力。我指的是你建议的一行。那个给了我一个错误。