python双重for循环 列表推导式_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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值