我想计算 python 上不同形状的面积

I want to calculate area of different shape on python

用户输入“圆3.5”或“矩形3 5”或“梯形3 5 7”(数量由用户自行决定)输出面积。下面是代码,但是不能运行.

s=input("Input the shape and number:")
# for example,
# s="rect:5 3"
# s="cir:3.5"
#s="trapz:3 5 7"
cmd, para=s.split(:)
print(f"{cmd}->{para}")

if cmd == 'cir':
    r = float(para)
    print(f"area={r*r*3.14}")
elif cmd == 'rect':
    sw, sh = int(para.split())
    print(f"area={sw*sh}")
elif cmd == 'trapz':
    ul, bl, h = int(para.split())
    print(f"area={(ul+bl)*h/2}")
else:
    print("wrong input")

感谢您的评论。我也尝试了另一种方法来解决这个 question.The 代码是:

s=input("Input the shape and number:").split()

if s[0]=="cir":
    r = float(s[1])
    print(f'area={r*r*math.pi}')
elif s[0]=="rect":
    sw, sh = int(s[1]), int(s[2])
    print(f"area={sw*sh}")
elif s[0]=="trapz":
    ul, bl, h = int(s[1]), int(s[2]), int(s[3])
    print(f'area={(ul+bl)*h/2}')
else:
    print('Wrong input!')

您的问题是多方面的。例如,您正尝试将多个值传递给 int()float(),它们采用和 return 单个值。要将 int 应用于列表,您可以使用 map 函数,否则它不会 运行.

我建议您查看尝试 运行 此代码时收到的错误消息。边学边做是很有价值的练习 Python。

您不能只将 int 应用于列表

s=input("Input the shape and number:")
cmd, para=s.split(":")
print(cmd,"->",para)

if cmd=='cir':
    r = float(para)
    print(f"arear={r*r*3.14}")
elif cmd=='rect':
    sw, sh = (float(x) for x in para.split())
    print(f"area={sw*sh}")
elif cmd=='trapz':
    ul, bl, h = (float(x) for x in para.split())
    print(f"area={(ul+bl)*h/2}")
else:
    print("wrong input")

您要求输入并将他们的答案分配给此处的 's' 变量:

s=input("Input the shape and number:")

然后你将 s 变量的值更改为不同的字符串三次。

s="rect:5:3"
s="cir:3.5"
s="trapz:3 5 7"

在这行代码之后,无论用户输入什么,s 变量都等于字符串:“trapz: 3 5 7”。

此外,用作 'split' 参数的冒号必须是字符串。

您的代码存在一些问题。在用户提供输入后,您正在为 s 分配一个值。我假设这些只是供您自己参考,所以我将它们注释掉了。

由于 s.split() 会将您的字符串转换为列表,因此您需要确保将列表的一部分分配给正确数量的变量。您不能直接将两个变量分配给三元素列表。所以我使用 s.split(':')[0], s.split(':')[1:] 来获取列表的第一个元素,然后是同一个列表的其余元素。

此外,您不能将 int() 应用于列表,因为 Python 不会为您做那么多魔法,因此您需要改用列表理解。

s=input("Input the shape and number:")
# s="rect:5:3"
# s="cir:3.5"
# s="trapz:3 5 7"
cmd, para=s.split(':')[0], s.split(':')[1:]
print(cmd,"->",para)

if cmd=='cir':
    r = float(para[0])
    print(f"arear={r*r*3.14}")
elif cmd=='rect':
    sw, sh =[int(x) for x in para]
    print(f"area={sw*sh}")
elif cmd=='trapz':
    ul, bl, h = [int(x) for x in para]
    print(f"area={(ul+bl)*h/2}")
else:
    print("wrong input")

示例输出:

Input the shape and number:rect:5:3
rect -> ['5', '3']
area=15

Input the shape and number:cir:3.5
cir -> ['3.5']
arear=38.465

Input the shape and number:trapz:3:5:7
trapz -> ['3', '5', '7']
area=28.0

尝试:

s=input("Input the shape and number:")
s = s.split(':')
cmd, para= s[0], s[1:] # <---- added this
print(cmd,"->",para)

if cmd=='cir':
    r = float(para[0])
    print(f"arear={r*r*3.14}")
elif cmd=='rect':
    sw, sh =list(map(int, para)) #<---- added this
    print(f"area={sw*sh}")
elif cmd=='trapz':
    ul, bl, h = list(map(int, para))
    print(f"area={(ul+bl)*h/2}")
else:
    print("wrong input")

Input the shape and number:trapz:3:5:7
trapz -> ['3', '5', '7']
area=28.0


Input the shape and number:rect:3:5
rect -> ['3', '5']
area=15

Input the shape and number:cir:4.6
cir -> ['4.6']
arear=66.44239999999999