python 简单实例训练(31~40)

31.题目:按相反的顺序输出列表的值。

程序分析:可以用列表切片的方式,也可以用reserve函数。

方法一:用reserve函数

# -*- coding: UTF-8 -*-

x = [1,2,3,4,5]
x.reverse()
print x

方法二:切片

# -*- coding: UTF-8 -*-

x = [1,2,3,4,5]
print x[::-1]

或者

# -*- coding: UTF-8 -*-

x = [1,2,3,4,5]
for i in x[::-1]:
    print i,

32.题目:按逗号分隔列表。

程序分析:join() 函数,将字符串合并为新的字符串,s.join(words) ,words 是一个只含有字符串的 taple 或者 list,join 用 s 作为分隔符,将 words 中的字符串连接起来,合并为一个字符串。具体可参考:http://blog.csdn.net/MTbaby/article/details/53065688

# -*- coding: UTF-8 -*-

L = [1,2,3,4,5]
s1 = ','.join(str(n) for n in L)
print s1
#输出:1,2,3,4,5

33.题目:练习函数调用。

# -*- coding: UTF-8 -*-

def hello_world():
    print 'hello world'

def three_hellos():
    for i in range(3):
        hello_world()
if __name__ == '__main__':
    three_hellos()
    #输出:hello world
    #     hello world
    #     hello world

34.题目:对10个数进行排序。

程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。或者直接用sort函数。

方法一:逐个依次比较法

# -*- coding: UTF-8 -*-

if __name__ == "__main__":
#这部分是把你输入的数字依次放在一个列表中,然后输出
    N = 10
    # input data
    print 'please input ten num:\n'
    l = []
    for i in range(N):
        l.append(int(raw_input('input a number:\n')))
    print
    for i in range(N):
        print l[i]
    print

    # sort ten num
    #是每次内循环找到未排序中的最小值的位置,然后把他们交换就可以
    for i in range(N - 1):
        min = i
        for j in range(i + 1,N):
            if l[min] > l[j]:
                min = j
        l[i],l[min] = l[min],l[i]
    print 'after sorted'
    for i in range(N):
        print l[i]

方法二:用sort()函数 ,初学者最好不要用人家现成的函数或者模块,要自己动手把逻辑思路整出来,这样才能到达练习的效果,sort是人家封装好的,所以你要自己写出自己的代码。

# -*- coding: UTF-8 -*-

x = [25,2,21,3,6,9,5,8,7,78]
x.sort()
print x

方法三:方法一和方法二的结合。(哈哈,方法很多,大家可以各抒己见啊,相互学习啊)

# -*- coding: UTF-8 -*-

N = 10
# input data
print 'please input ten num:\n'
l = []
for i in range(N):
    l.append(int(raw_input('input a number:\n')))
print l
#sort ten num
l.sort()
print l

35.题目:求一个3*3矩阵对角线元素之和。

程序分析:给定一个已知的数组,再将a[i][i]累加后输出。

方法一:

# -*- coding: UTF-8 -*-

l = []
x = [1,2,3]
y = [4,5,6]
z = [7,8,9]

l.append(x)
l.append(y)
l.append(z)
print l
#求a[i][i]位置上元素的和
sum = 0
for i in range(3):
    sum = sum + l[i][i]
print sum

输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
15

方法二:用切片的方式,直接把对角线元素帅选出来载求和

# -*- coding: UTF-8 -*-

x = range(1,10)
a = x[::4]
print a
print sum(a)

输出:

[1, 5, 9]
15

方法三:用最直观的方法把矩阵表示出来

# -*- coding: UTF-8 -*-

#输入矩阵
x = range(1,10)
for row in range(3):
    for col in range(3):
        print x[row*3+col],
    print

#求对角线的和(最容易想到,最直接的方法)
sum = 0
for row in range(3):
    for col in range(3):
        if col == row:
            sum = sum + x[row*3+col]
print '对角线和:',sum

输出:

 1 2 3
 4 5 6
 7 8 9
对角线和: 15

方法四:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

# -*- coding: UTF-8 -*-

a = []
sum = 0.0
for i in range(3):
    a.append([])
    for j in range(3):
        a[i].append(float(raw_input("input num:")))
for i in range(3):
    sum += a[i][i]
print sum

输出:

    input num:1
    input num:2
    input num:3
    input num:4
    input num:5
    input num:6
    input num:7
    input num:8
    input num:9
    15.0

36.题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

方法一:先把输入的数放在列表的最后一个元素,再进行选择排序,方法与34题一样

# -*- coding: UTF-8 -*-

l = [1,4,6,9,13,16,19,0]
number = int(raw_input("pls input a bumber:"))
l[6] = number   #把你输入的数字赋值给列表最后一个元素,即把0替换

N = 8
for i in range(N - 1):
    min = i
    for j in range(i + 1,N):
        if l[min] > l[j]:
            min = j
    l[i],l[min] = l[min],l[i]
print 'after sorted'
for i in range(N):
    print l[i]

输出:

    pls input a bumber:11
    after sorted
    1
    4
    6
    9
    13
    16
    19

方法二:sort(),这方法不用看了。

# -*- coding: UTF-8 -*-

l = [1,4,6,9,13,16,19,0]
number = int(raw_input("pls input a bumber:"))
l[6] = number

l.sort()
print l

输出:

 pls input a bumber:11
 [0, 1, 4, 6, 9, 11, 13, 16]

方法三:冒泡排序,先想想水冒泡,就是把大的冒出,小的被挤下去。这里也是一样,两两比较,然后交换位置。

# -*- coding: UTF-8 -*-

l = [1,4,6,9,13,16,19,0]
number = int(raw_input("pls input a bumber:"))
l[6] = number
temp = 0
n = 8
for i in range(n):
    for j in range(i + 1,n):
        if l[i]>l[j]:
            temp = l[i]
            l[i] = l[j]
            l[j] = temp
print l

输出:

pls input a bumber:8
[0, 1, 4, 6, 8, 9, 13, 16]

37.题目:将一个数组逆序输出。

程序分析:用第一个与最后一个交换。

方法一:

# -*- coding: UTF-8 -*-

a = [9,6,5,4,1]
N = len(a) 
print a
for i in range(len(a) / 2):
    a[i],a[N - i - 1] = a[N - i - 1],a[i]
print a

输出:

[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

方法二:切片,也不用看,很简单的。

# -*- coding: UTF-8 -*-

l = [1,2,3,4,5]
print l
x = l[::-1]
print x

输出:

[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

38.题目:题目:两个变量值互换

程序分析:可直接通过第三个数来交换,或者定义函数

方法一:

 # -*- coding: UTF-8 -*-
temp = 0
x = 10
y = 20
print 'x = %d'% x,'y = %d'% y
temp = x
x = y
y = temp

print 'x = %d'% x,'y = %d'% y

输出:

x = 10 y = 20
x = 20 y = 10

方法二:用定义函数的方法交换

def exchange(a,b):
    a,b = b,a
    return (a,b)

x = 10
y = 20
print 'x = %d,y = %d' % (x,y)
x,y = exchange(x,y)
print 'x = %d,y = %d' % (x,y)

输出:

x = 10,y = 20
x = 20,y = 10

39.题目:统计 1 到 100 之和。

程序分析:可以直接用sum,也可以用for循环。

方法一:

# -*- coding: UTF-8 -*-
sum = 0
for i in range(1,101):
    sum += i
print sum

方法二:

# -*- coding: UTF-8 -*-
print sum(range(1,101))
输出:5050

40.题目:求输入数字的平方,如果平方运算后小于 50 则退出。

程序分析:很简单,用判断语句就可以了

方法一:

# -*- coding: UTF-8 -*-
while True:
    x = int(raw_input('pls input a number:'))
    fg = 0
    if x*x < 50:
        print '程序已退出,请重新输入'
        fg = False
    else:
        print '%d * %d = %d'%(x,x,x*x)
        break

输出:

pls input a number:5
程序已退出,请重新输入
pls input a number:36
36 * 36 = 1296

方法二:定义函数

 # -*- coding: UTF-8 -*-

TRUE = 1
FALSE = 0
def SQ(x):
    return x * x
print '如果输入的数字小于 50,程序将停止运行。'
again = 1
while again:
    num = int(raw_input('Please input number'))
    print '运算结果为 %d' % (SQ(num))
    if num >= 50:
        again = TRUE
    else:
        again = FALSE

输出:

如果输入的数字小于 50,程序将停止运行。
Please input number:36
运算结果为 1296
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值