在做Python3 约瑟夫生者死者小游戏时遇到的print(,end=“”)和循环删除列表遇到的问题

系统:Ubuntu

第一个就是在命令行输入命令:python test.py,在执行print(列表元素, end="\t")时报错,说end后面=""这些符号是非法的,然后以为是中英文输入法切换的问题,结果还是报错,看了代码格式和单词也没问题啊,怎么还报错,后来想到网上和教程上说Python2和Python3有很大的区别,然后Ubuntu又是自带了Python2和Python3,就猜测估计命令行输入错了,就尝试了把python test.py改为python3 test.py,结果运行成功,然后个人理解为end=""是Python3的用法

       第二个就是在循环遍历列表删除数据的问题,这个问题折腾了很久,后面才把约瑟夫这道题做出来,

'''
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
'''
num = list(range(1,31))
num2 = []
#print(num.remove(1))
#print(max(num))
j=1
while 15<len(num) < 31:
	for i in num:
		#j+=1
		max_n=max(num)
		if j == 9:
			num2.append(i)
			num.remove(i)
			#j=1
			if i == max_n:#如果i是列表最后一个元素即最大值时,因为在上面已经执行remove操作,所以此时列表的元素个数是减一的,所以列表最大值要提前缓存
				j=0
				#print(i,end='\t')
			else:
				j=1
		#print(j,i)
		#if i== max(num):
			#break
		#else:
		j+=1
print(num2)

在这个过程中关于循环遍历列表删除数据,个人猜测就是for循环是根据索引有序的遍历下去的,可能也就是跟那个迭代器有关,num.remove(i)时,比如i的值为1索引为0,那么下一个元素2索引为1就移到了1的位置,2的索引就变成了0,那么下一次循环的索引就是1,此时的元素为3,元素2就没有被循环到。

然后 为了验证我的猜测,去看了一些大佬的博客:

https://www.cnblogs.com/baihualin/p/10698651.htmlpython中循环删除列表中元素时的坑!

https://blog.csdn.net/xtydtc/article/details/90602019(python3中用for循环删除列表中元素的坑)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值