制作了一个程序来模拟地球上生命的最简单形式;数组中较大的数字(species [])在数组旁边吃一个较小的数字,并使该数字变小。我做了一个if语句,说如果num> 0&长度> 1,然后执行任何操作,其中num是程序运行的循环数,length是数组的长度,species []。我已经测试了两个变量并且它们都超过1.即使如此,if语句也没有运行,else正在使它摆脱while循环。关于如何修复它的任何想法?请以简单的方式解释,我刚刚开始编码。继承我的代码:
# Import Packages
import random
# Author
__author__ = 'VectorImage'
# Defaults
print('DEFAULTS')
print('Starting Size = 10')
print('Chance Of New Species = 1')
print('New Species Size = 5')
print('Number of Cycles = 100')
print('\n\n');
# Variables
print('SET VARIABLES')
choice = input('CUSTOM or DEFAULT: ')
p3 = 11
while p3 > 10:
if choice == 'CUSTOM':
p1 = int(input('Starting Size: '))
p2 = int(input('Chance Of New Species (lower number means higher chance): '))-1
p3 = int(input('New Species Size: '))-1
p4 = int(input('Number of Cycles: '))
elif choice != 'CUSTOM':
p1 = 10
p2 = 0
p3 = 5
p4 = 100
else:
print('species size cannot be more than x10')
species = [p1, p1, p1]
length = None
l = None
new_species = None
chance = None
num_range = None
temp_num = None
num = None
print('\n\n')
# Program
def main():
print('PROGRAM')
length = len(species)
if length > 2:
l = 0
num = p4
while 1 < 2:
print(species)
if num > 0 & length > 1:
length = len(species)
num_range = int(round(random.random()*(p3+1)))
new_species = int(round(random.random()*p2))
chance = int(round(random.random()))
if new_species == 0:
if chance == 0:
species.insert(len(species) + num_range, length)
else:
species.insert(len(species) - num_range, length)
l += 1
num -= 1
print('Cycle #', p4-num)
print(length, ' species')
else:
break
if species[length-1] > species[length-2]:
temp_num = species[length-1] - num_range * (1 + p3)
species[length-2] -= temp_num
species[length-1] += temp_num
else:
temp_num = species[length-1] - (num_range * (1 + p3))
species[length-1] += temp_num
species[length-2] -= temp_num
if species[length-1] <= 0:
del species[length-1]
elif species[length-2] <= 0:
del species[length-2]
# RUN
main()
答案 0 :(得分:3)
替换
if num > 0 & length > 1:
与
if num > 0 and length > 1:
Python中的 &
是按位的,而前一行代码相当于if num > (0 & length) > 1:
,这不是你想要的。
答案 1 :(得分:1)
&
不是您正在寻找的运营商。它比较了两个操作数的位。使用布尔运算符and
和or
。