博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---10、循环语句练习

Posted on 2019-09-30 17:03  兰智杰  阅读(711)  评论(0编辑  收藏  举报

  keys()、values()和items()返回的值不是真正的列表,它们不能被修改,没有append()方法

  items()获取到字典的 key 和value ,组成元组

  enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列即键值对, 同时列出数据和数据下标,一般用在 for 循环当中。

  1、创建一个名为favorite_places的字典,在这个字典中,将三个人的名字用作键,对于其中的每个人,都存储他喜欢的1〜3个地方。朋友指出他们喜欢的一个地方(input),遍历这个字典,将这个人的名字及其喜欢的所有地方打印出来

favorite_places = {'张三':['上海','北京','广州'],'李四':['九寨沟','张家界','鼓浪屿']}
place= input('请输入一个地名')
length=0
for k,v in favorite_places.items():
    length += 1
    for  m  in  v  :
        if m==place:
            print(k,v)
            length=0
    if length==len(favorite_places):
        print('没有人喜欢这个地方')

                           #keys()、values()和items()返回的值不是真正的列表,它们不能被修改,没有append()方法
print(favorite_places.items())         #获取到字典的 key 和value 组成的元组字典
                           #输出为 dict_items([('张三', ['上海', '北京', '广州']), ('李四', ['九寨沟', '张家界', '鼓浪屿'])])
for k,v in favorite_places.items():        #items将字典转化为可遍历的元组
    print(k,v)
                           #输出为     张三 ['上海', '北京', '广州']
                           #          李四 ['九寨沟', '张家界', '鼓浪屿']

  2、用for、while循环打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):                                #range函数含头不含尾
        print('%d x %d = %d'%(j,i,(j*i)),end = '\t')      #输出不换行,按列对齐\t
    print()                                               #以换行为结尾
#两种不同的实现方法
i = 1
while i < 10:
    j = 1
    while j<=i:
        print('%d x %d = %d' % (j,i,(j * i)), end='\t')
        j+=1
    i+=1
    print()

  3、从键盘输入一个字符串,将小写字母全部转换成大写字母,将字符串以列表的形式输出(如果字符串包含整数,转为整型)

str1 = input('请输入一个字符串:')      #接受一个字符串 
list1 = []                          #生成一个空列表
for i in str1:                      #遍历输入的字符串
    if i.isdecimal() == True:       #判断当前字符是否是数字  与i.isdigit()作用一样
        list1.append(int(i))        #将数字转换为int类型然后插入到列表当中
    else:
        list1.append(i.upper())     #将当前字符转换为大写,然后追加到列表当中
print(list1)

  4、随机输入8位以内的的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

num = input('请输入一个8位以内数:')
if num.isdigit()==True:
    if len(num) <= 8 :
        print('这个数是%d位数'%len(num))
        print(num[::-1])
    else :
        print('输入超过八位数')
else:
    print('输入有误')

  5、一球从n米(自己输入)高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少米?

n = int(input('请输入初始高度:'))
m = 0
for i in range(1,11):
    if i == 1 :       #第一次触地
        m += n
    else:             #第二次触底是与那里高度的一半
        n/=2
        m+=n*2      #在累加起来
print(m)

  6、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

str1 = input('请输入字符:')
zf = 0
num = 0
space = 0
other = 0
for i in str1:
    if i.isalpha():
        zf+=1
    elif i.isdigit():
        num+=1
    elif i.isspace():
        space+=1
    else:
        other+=1
print('字母的个数:%d,数字的个数:%d,空格的个数:%d,其他字符的个数:%d'%(zf,num,space,other))

  7、找出名字中长度大于4的名字,组成列表打印出来,过滤掉长度大于5的字符串列表,并将剩下的转换成大写字母

names = ['Tom','Billy','Andrew','Wesley','Joe','Jill','Ana','Wendy','Eva']
name = []
for i in names:
    if len(i) > 4 :
        name.append(i)
print(name)                           #输出为 ['Billy', 'Andrew', 'Wesley', 'Wendy']
name = [i for i in names if len(i) > 4]      #生成一个列表
print(name)                           #输出为 ['Billy', 'Andrew', 'Wesley', 'Wendy']
name = [i.upper() for i in names if len(i) < 5]
print(name)                           #输出为 ['TOM', 'JOE', 'JILL', 'ANA', 'EVA']

  8、求M,N中矩阵对应元素的和

m = [[1,2,3],
    [4,5,6],
    [7,8,9]]
n = [[2,2,2],
    [3,3,3],
    [4,4,4]]
list01=[]
for i in range(3):
    list02 = []
    for j in range(3):
        list02.append(m[i][j]+n[i][j])
    list01.append(list02)
print(list01)

  9、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方

for i in range(100,1000):
    x = i//100          #符号/表示的是除,返回的是商,符号//表示的是取整除,返回的是商的整数部分
    y = i%100//10
    z = i%100%10
    if i == (x**3)+(y**3)+(z**3) :
        print(i)

  10、打印菱形

for i in range(1,8,2):
    print(('*'*i).center(7))
    if i == 7:
        for i in range(5, 0, -2):
            print(('*' * i).center(7))
i = '*'
n = int(input('n = '))#表示输出的行数
l = []
l.append(i)
for index in range(1,n):
    print(i.center(n * 2 + 1))
    i+= '**'
    l.append(i)
for index  in l[::-1]:
    print(index.center(n * 2 + 1))

  11、一个5位数,判断它是不是回文数,即12321是回文数

num = input('请输入一个数')if num == num[::-1]:
    print('%s是一个回文数' % num)
else:
    print('%s不是一个回文数' % num)

  12、求一个3*3矩阵对角线元素之和 ,包括主对角线和副对角线

m = [[1,2,3],
    [4,5,6],
    [7,8,9]]
x = 0
y = 0
for i in range(3):
    x+=m[i][i]
    y+=m[i][2-i]
print(x)      #输出为15,主对角线
print(y)      #输出为15,副对角线

  13、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

for x in range(1,5):
    for y in range(1,5):
        for z in range(1,5):
            if x != y and x != z and y != z:
                print(x*100+y*10+z)
#列表推导式
num = [x*100+y*10+z  for x in range(1,5) for y in range(1,5) for z in range(1,5) if x != y and x != z and y != z]
print(num)

   14、将列表用for循环添加到另一个字典中

names = ['Tom','Billy','Andrew','Joe','Alice','Sherry','Eva']
print(list(enumerate(names)))
#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
# 同时列出数据和数据下标,一般用在 for 循环当中。
name = {k:v for k,v in enumerate(names)}
print(name)
'''
    输出为
    [(0, 'Tom'), (1, 'Billy'), (2, 'Andrew'), (3, 'Joe'), (4, 'Alice'), (5, 'Sherry'), (6, 'Eva')]
    {0: 'Tom', 1: 'Billy', 2: 'Andrew', 3: 'Joe', 4: 'Alice', 5: 'Sherry', 6: 'Eva'}
'''

  15、设一组账号和密码不少于两个,通过输入账号和密码,如果输入正确则显示登录成功,若账号或者密码错误则显示登录失败,最对可以输入三次

users ={'张三':'123456','李四':'654321'}
for i in range(3):
    name = input('请输入账号:')
    pwd = input('请输入密码:')
    if name in users:
        if pwd == users[name]:
            print('登录成功')
            break
        else:
            if i== 2:
                print('您的账号已冻结!')
                break
            print('您的密码有误!')
    else:
        if i == 2:
            print('您的账号已冻结!')
            break
        print('您的账号有误!')

  16、求阶乘 用while 和for 分别实现

num = int(input('请输入一个数:'))
for
x = 1
for i in range(1,num+1):
    x*=i
print(x)
#两种实现方式
x = 1
y = 1
while x <= num:
    y*=x
    x+=1
print(y)

  17、冒泡排序 从小到大

list01 = [2,6,4,9,3,10]
for i in range(len(list01)):                                #要排几个 排序的次数
    for j in range(1,len(list01)-i):                        #剩下的数开始排序
        if list01[j] < list01[j-1]:
            list01[j],list01[j-1] = list01[j-1],list01[j]   #Python中的特殊用法
print(list01)                                               #输出为[2, 3, 4, 6, 9, 10]

  18、模块的引入

import random
i=1
while i<=5:
    print(random.randint(1,10),end = ' ') #输出为 9 4 8 3 5
    i+=1