检查一个数字是否是另一个数字的倍数

4
我想检查一个数字是否是第二个数字的倍数。以下代码有什么问题?
def is_multiple(x,y):
    if x!=0 & (y%x)==0 :
       print("true")
    else:
       print("false")
    end
print("A program in python")
x=input("enter a number :")
y=input("enter its multiple :")
is_multiple(x,y)

错误:

TypeError: not all arguments converted during string formatting

你需要将x转换为整数或使用int(input(... - Avinash Raj
请注意使用哪个版本的Python(尤其是如果你使用的Python版本与你正在阅读的教程中使用的版本不同),因为在Python 2和3中,input函数是不同的。 - Holt
4个回答

11
你正在使用二进制与运算符&;你需要使用布尔与运算符and
x and (y % x) == 0

接下来,您希望将输入转换为整数:

x = int(input("enter a number :"))
y = int(input("enter its multiple :"))

如果在一行中出现了end表达式,你将会得到一个NameError错误,可以直接删除它,Python不需要它。

在布尔上下文中(例如if语句),你只需测试x;如果数字为0,则被认为是false:

if x and y % x == 0:

你的is_multiple()函数应该只返回一个布尔值;将打印留给负责所有其他输入/输出的程序部分:

您的is_multiple()函数最好只返回一个布尔值;将打印留给执行所有其他输入/输出功能的程序部分。

def is_multiple(x, y):
    return x and (y % x) == 0

print("A program in python")
x = int(input("enter a number :"))
y = int(input("enter its multiple :"))
if is_multiple(x, y):
    print("true")
else:
    print("false")

如果使用条件表达式,最后一部分可以简化:

print("A program in python")
x = int(input("enter a number :"))
y = int(input("enter its multiple :"))
print("true" if is_multiple(x, y) else "false")

你想将输入转换为整数 - 为什么?问题是“检查一个数字是否是第二个数字的倍数”,而不是“检查一个整数是否是...”。例如,我认为4.4是1.1的倍数。只有因子本身,这里是4,必须是整数(否则整个概念就没有意义)。 - Chris K
@ChrisK.: 因为浮点数和干净的除法通常不搭配,所以使用 int() 更加合适。虽然 4.4 % 1.1 恰好等于 0.0,但这并不是典型情况。例如,尝试使用 3.3 而不是 4.4 - Martijn Pieters
请注意,我在这里的回答是考虑到“编程新手”,因为这显然是这种情况。要求学生编写这些函数的教师(这绝对是为了作业、课程或书籍练习或任务而编写的)肯定会考虑整数,因为当涉及浮点值时,拥有这个功能会更加复杂。 - Martijn Pieters

4

需要注意以下几点:

  1. 使用 and 进行条件判断,而不是二进制运算符 &
  2. 将输入转换为数字(例如使用 int())- 你可能还想捕获一些非数字输入的情况

下面的代码应该可以正常运行:

def is_multiple(x,y):
    if x != 0 and y%x == 0:
        print("true")
    else:
        print("false")

print("A program in python")
x = int(input("enter a number :"))
y = int(input("enter its multiple :"))
is_multiple(x, y)

0

我尝试了这个方法,当x和/或y等于0时也可以工作。不知道是否有更短的写法。

测试结果为(4,12), (12, 4), (2,0), (0,2), (0, 0)
(结果应该是:False True False True True)。

def exo1(x,y):
    #x = int(input("input number x: "))
    #y = int(input("input number y: "))
    if x==0 and y==0:
        return True 
    if x>0 and y==0:
        return False 
    if y>0 and x==0:
        return True 
    if x!=0 and y!=0 and (x%y)==0: 
        return True
    else:
        return False
print(exo1())
print(exo1(4,12))
print(exo1(12,4))
print(exo1(2,0))
print(exo1(0,2))
print(exo1(0,0))

0

使用and运算符代替位运算符&

您需要使用int()将值转换为整数。

def is_multiple(x,y):
    if x!=0 and (y%x)==0 :
       print("true")
    else:
       print("false")

print("A program in python")
x = int(input("enter a number :"))
y = int(input("enter its multiple :"))
is_multiple(x,y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接