六道土豆 发表于 2016-9-18 09:09:21

求大神解答 python3的问题

本帖最后由 六道土豆 于 2016-9-18 09:47 编辑

def barnYard1():
    heads = int(input('Enter number of heads:'))
    legs = int(input('Enter number of legs:'))
    pigs, chickens, spiders = solve2(legs, heads)
    if pigs == None:
      print('There is no solution')
    else:
      print('Number of pigs:', pigs)
      print('Number of chickens:', chickens)
      print('Number of spiders:', spiders)

def solve2(numLegs, numHeads):
    solutionFound = False
    for numSpiders in range(0, numHeads + 1):
      for numChicks in range(0, numHeads - numSpiders + 1):
            numPigs = numHeads - numChicks - numSpiders
            totLegs = 4 * numPigs + 2 * numChicks + 8 * numSpiders
            if totLegs == numLegs:
                print('Number of pigs: ' ,numPigs)
                print('Number of chickens: ' ,numChicks)
                print('Number of spiders: ' ,numSpiders)
                solutionFound = True
    if not solutionFound: print('There is no solution')

放在Python3中 为什么计算不了

776667 发表于 2016-9-18 09:42:48

你这代码问题出在pigs, chickens, spiders = solve2(legs, heads)
solve2(legs, heads)又没有设定返回值,所以返回结果是None,左边是3个变量,右边是一个不可遍历的None,当然会报错

六道土豆 发表于 2016-9-18 09:46:33

776667 发表于 2016-9-18 09:42
你这代码问题出在pigs, chickens, spiders = solve2(legs, heads)
solve2(legs, heads)又没有设定返回值, ...

我运行了一下程序,答案是出来了但报错是:barnYard1()
File "E:\计算机科学cs50\MIT.py", line 358, in barnYard1
    pigs, chickens, spiders = solve2(legs, heads)
TypeError: 'NoneType' object is not iterable

776667 发表于 2016-9-18 10:44:19

六道土豆 发表于 2016-9-18 09:46
我运行了一下程序,答案是出来了但报错是:barnYard1()
File "E:\计算机科学cs50\MIT.py", line 3 ...

这个报错意思是'NoneType'对象是不可迭代的,你左边是3个要赋值的变量,右边却只有1个值,因此默认你右边的值是一个可迭代的对象,但是solve2(legs, heads)返回的是None所以就这样报错了,和我上面讲的死一个意思。
你想让pigs, chickens, spiders = solve2(legs, heads)正常执行不报错,可以让solve2(legs, heads)返回一个包含3个值的列表或元组。
我看你似乎连函数返回值是咋回事都不清楚,先多看点基础吧

六道土豆 发表于 2016-9-18 13:08:15

776667 发表于 2016-9-18 10:44
这个报错意思是'NoneType'对象是不可迭代的,你左边是3个要赋值的变量,右边却只有1个值,因此默认你右 ...

大神,我菜鸟 一个   才刚学几天      我是在学基础的 啊   谢谢

不二如是 发表于 2023-12-4 15:40:31

代码中有两个函数,barnYard1() 用于输入数据并调用 solve2() 函数来找到可能的解决方案。solve2() 函数使用嵌套的循环来尝试不同的动物数量组合,并检查它们是否满足给定的头和腿的总数。

修改后:

def barnYard():
    heads = int(input('Enter number of heads: '))
    legs = int(input('Enter number of legs: '))
    solutionFound = False

    for spiders in range(heads + 1):
      for chickens in range(heads - spiders + 1):
            pigs = heads - chickens - spiders
            total_legs = 4 * pigs + 2 * chickens + 8 * spiders
            if total_legs == legs:
                print('Number of pigs:', pigs)
                print('Number of chickens:', chickens)
                print('Number of spiders:', spiders)
                solutionFound = True
                break# 如果找到一个解决方案,退出循环
      if solutionFound:
            break# 如果找到一个解决方案,退出外部循环

    if not solutionFound:
      print('There is no solution')

barnYard()
页: [1]
查看完整版本: 求大神解答 python3的问题