实验三

# 基础操作联系1:格式控制、列表解析、类型转换

x = list(range(10))

print('整数输出1:', end='')
for i in x:
    print(i, end=' ')

print('\n整数输出2:', end='')
for i in x:
    print(f'{i:02d}', end='-')    #指定每个整数输出宽度占两列,不足两列,左边补0

print('\n整数输出2:', end='')
for i in x[:-1]:
    print(f'{i:02d}', end='-')
print(f'{x[-1]:02d}')

print('\n字符输出1:', end='')
y1 = [str(i) for i in range(10)]  #函数str()用于把其他函数类型转换成字符串对象
print('-'.join(y1))

print('字符输出2:', end='')
y2 = [str(i).zfill(2) for i in range(10)]  #方法.zfill()用于对字符串进行格式化,指定宽度为2列,不足左边补0
print('-'.join(y2))

# 基础操作练习2:range对象、列表解析、类型转换、字符串方法

print('整数列表:')
x = list(range(97, 97+26))
for i in x:
    print(i, end=' ')

print('\n字符列表1:')
lower_alpha = [chr(i) for i in range(97, 97+26)]  #函数chr()返回整数对应的字符串形式
for i in lower_alpha:
    print(i, end=' ')

print('\n字符列表2:')
upper_alpha = [i.upper() for i in lower_alpha]  # 方法.upper()用于把小写字母转换成大写
for i in upper_alpha:
    print(i, end=' ')

# 基础操作练习3:标准库random,string
import random
import string

print('用列表存储随机整数:')
ls = [random.randint(1, 100) for i in range(5)]
print(ls)

print('\n用集合存储随机整数:')
s = {random.randint(1, 100) for i in range(5)}
print(s)

print('\n\n字母串:', end='')
alpha = string.ascii_letters
print(alpha)
print(type(alpha))

print('\n数字串:', end='')
digits = string.digits
print(digits)
print(type(digits))

# 测试集合解析形式5:s = {random.randint(1, 100) for i in range(5)}生成集合,len(S)一定是5吗?
import random

print('用集合存储随机整数:')
while True:
    s = {random.randint(1, 100) for i in range(5)}
    print(s)
    if len(s) < 5:
        break

实验结论:

       1.利用random.randint(1, 100)生成的随机整数范围是1~100,包括100!!!但是利用range(1, 100)生成的有序序列范围是1~99,不包括100。

       2.使用集合解析形式s = {random.randint(1, 100) for i in range(5)}生成集合,len(s)不一定是5,因为随机生成的整数可能重复,而列表不会容纳重复元素,因此会出现 len(s) < 5 的情况。

x = []
a = 0
b = 1
c = 0
x.append(a)
x.append(b)
while True:
    c = a + b
    a = b
    b = c
    if c < 1000:
        x.append(c)
    else:
        break
count = 0
for i in x:
    print('{:>6}'.format(i), end='')
    count += 1
    if count % 5 == 0:
        print('')

import random
x = random.randint(1, 31)
count = 0
info = eval(input('猜一下2021年5月你的幸运日吧^_^\n你只有三次机会哦!猜吧(1~31):'))
if info == x:
    print('Bingo!')
    exit()
else:
    count += 1
    while count < 3:
        if info < x:
            print('早啦早啦,填早啦!你的幸运日还早呢~')
        elif info > x:
            print('晚啦,你的幸运日比你想象的还要早哦~')
        else:
            print('Bingo!')
            exit()
        info = eval(input('再猜再猜:'))
        count += 1
    else:
        if info < x:
            print(f'早啦早啦,填早啦!你的幸运日还早呢~\n次数用完啦\n2021年5月你的幸运日是{x}号')
        elif info > x:
            print(f'晚啦,你的幸运日比你想象的还要早哦~\n次数用完啦\n2021年5月你的幸运日是{x}号')
        else:
            print('Bingo!')
            exit()

 

 

while True:
    num = [i for i in range(0, 10)]
    alpha = [chr(i) for i in range(65, 91)]
    data = num + alpha
    print('\n', '{:-^40}'.format('转换器重置'))
    list1 = []
    x, n = eval(input('输入十进制整数x和要转换的进制n:'))
    while x != 0:
        list1.append(data[x % n])
        x = x // n
    print(f'{x}的{n}进制是:', end='')
    list1 = list1[::-1]
    for i in list1:
        print(i, end='')

实验总结:

       通过这次实验,我学习到了随机数的生成、遍历列表的嵌套以及集合解析,我发现条条大路通罗马,问题的解决确实有很多很多方法,通过和同学交流总是能有耳目一新的感觉。

       与此同时,我理解了Python之禅中“扁平胜于嵌套”和“间隔胜于紧凑”的意义,“扁平胜于嵌套”是说优美的代码应当是扁平的,不能有太多的嵌套,太多的嵌套不仅会导致编程时逻辑不清甚至混乱,而且会导致在后期修改编码时“牵一发而动全身”,十分麻烦;“间隔胜于紧凑”是说优美的代码有适当的间隔,不要奢望一行代码解决问题,紧凑虽然简洁,但是不便于阅读和修改。

 

posted @ 2021-04-17 11:41  abbbc  阅读(81)  评论(1)    收藏  举报