Python编程题、for循环和列表推导式的用法题(阿凡提与国王比赛下棋、 斐波那契数列等)

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
"""1. 阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。
阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,
第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,
以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64个格子都放满。
需要多少粒米呢?(要求 for 循环实现,和第二种方法:列表推导式实现)
"""

temp = 1    #for循环
sum1 = 1
for i in range(1,64):
    temp = temp * 2
    sum1 = sum1 + temp
print("用for循环实现:",sum1)

#del sum1

alist = [2 ** x for x in range(0,64) ] #列表推导式
print("用列表推导式实现:",sum(alist))
del alist
print("用进制转化实现:",int ('1' * 64, 2))    #二进制转化成整型

"""
2. 求1到9中的所有偶数    (要求 for 循环实现,和第二种方法:列表推导式实现)
"""
print("用for循环实现:")
for i in range (1,10):  #for循环
    if i % 2 == 0:
        print(i, end = " ")
print()

print("用列表推导式实现:")
alist = [x for x in range(1,10) if(x % 2 == 0)]     #列表推导式
print(alist)
del alist
                                                                                                                                                                                                                                      
"""
3. alist= ['  aa', '  bb  ', 'cc  ']
(1)不增加内存空间,去掉空格,并输出原列表。
"""
alist = [' aa', ' bb', 'cc ']    #for循环
for i in range(len(alist)):
    alist[i] = alist[i].strip()
print("用for循环实现:",alist)
del alist

alist = [' aa', ' bb', 'cc ']   #列表推导式
alist = [alist[i].strip() for i in range(len(alist)) ]
print("用列表推导式实现:",alist)
del alist
"""
(2) 生成一个新列表,去掉空格,并输出新列表
(1)(2)均要求 for 循环实现和列表推导式两种方法实现
"""
alist = [' aa', ' bb', 'cc ']
blist = []                   #for循环
for i in alist:
    blist.append(i.strip())
print("用for循环实现:",blist)
del blist

blist = [x.strip() for x in alist]  #列表推导式
print("用列表推导式实现:",blist)
del alist
del blist
"""
4. 计算1+2+。+100的数值,赋值给某变量,并输出,使用lambda表达式实现
"""
from functools import reduce
seq = list(range(1,101))                        #lambda表达式   
x = reduce(lambda x, y: x + y, seq)
print(x)

"""
5  a=1234,取每一位,并输出,以,分开,如1,2,3,4。  使用lamdba表达式实现。
"""
a = 1234
b,c,d,e = map(int,str(a))
print(b,c,d,e,sep=",")

g = lambda x: map(int,str(x))                   #lambda表达式 
b,c,d,e = g(a)
print(b,c,d,e,sep=",")


""""
6 综合:使用函数定义、循环,判断语句,列表和序列解包(赋值时)实现斐波那契数列。
要求:输入参数为数列长度,输出为数列。从f(0),或者从f(1)开始都可以。
 斐波那契数列(Fibonacci sequence),又称黄金分割数列、
 因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)
 以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:
 1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义
 :F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
注意:序列解包法赋值时:
如 a, b = b, a+b
执行情况为:a和b同时被赋值。没有先后。
例如 当前a=3,b=5
执行 a, b = b, a+b后,
      结果为:a=5, b=8

"""

alist = [1,1]
n = int(input("(方法一:公式法)输入一个整数,代表列表长度:  "))
if n == 1:
    print([1])
else :
    for i in range(2,n):
        alist.append(alist[i - 1] + alist[i - 2])
    print(alist)
del alist


alist = [1]
a = 1
b = 1
n = int(input("(方法二:序列解包)输入一个整数,代表列表长度:  "))
for i in range(1,n):
    if n == 1:
        break
    else:
        alist.append(b)
        a,b = b, a + b
        
print(alist)   

"""
7  课本55页  第一行的列表推导式 要求用双重循环实现
"""
x = [1,2,3]
y = [3,1,4]
z = []
for i in x:
    if i == 1 :
        for j in y:
            if j != i :
                z.append((i,j))
print(z)

 

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值