day6作业

"""
str
'aksfhk',"爱康很舒服34",'\n\t'"\'
'\u4e00', chr(), ord()

获取单个字符: 字符串[下标]

获取部分字符(切片): 字符串[开始下标:结束下标:步长]
字符串[开始:结束]
字符串[::-1]

+,*, >,<,<=,>=,==,!=, =, +=, *=
in/not in
len()
str()

格式字符串
'姓名%s, %d, %.2f, %c' % (name, age, 12.5, 'A')
"""

  1. 输入一个字符串,打印所有奇数位上的字符
    (下标是1,3,5,7…位上的字符)
    例如: 输入'abcd1234' 输出'bd24'
str1 = 'abcd1234'
# 方法一: 遍历
str2 = ''
for index in range(1, len(str1), 2):
    str2 += str1[index]
print(str2)

# 方法二: 切片
print(str1[1::2])
  1. 输入用户名,判断用户名是否合法(用户名长度6~10位)
user_name = 'xiaoming'
if 6 <= len(user_name) <= 10:
    print('合法')
else:
    print('不合法')
  1. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
    例如: 'abc' — 合法 '123' — 合法
    ‘abc123a’ — 合法
user_name = 'xiao胡ming87'
for char in user_name:
    if not('a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9'):
        print('不合法')
        break
else:
    print('合法')
  1. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
    例如: 'abc' — 不合法 '123' — 不合法
    'abc123' — 不合法 'Abc123ahs' — 合法
user_name = 'Abc123ahs'
count = 0    # 数字的个数
if 'A' <= user_name[0] <= 'Z':
    for char in user_name[1:]:
        if not('a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9'):
            print('不合法')
            break
        else:
            if '0' <= char <= '9':
                count += 1
    else:
        if count == 0:
            print('不合法')
        else:
            print('合法')

else:
    print('不合法')
  1. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
    例如:输入'abc1shj23kls99+2kkk' 输出:'123992'
str3 = 'abc1shj23kls99+2kkk'
new_str = ''
for char in str3:
    if '0' <= char <= '9':
        new_str += char
print(new_str)
  1. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出
    例如: 输入'a2h2klm12+' 输出 'A2H2KLM12+'
    小写字母转大写字母原理
char = 'h'
new_char = chr(ord(char)-32)
print(new_char)


str4 = 'a2h2klm12+'
new_str = ''
for char in str4:
    if 'a' <= char <= 'z':
        new_char = chr(ord(char)-32)
        new_str += new_char
    else:
        new_str += char
print(new_str)
  1. 输入一个小于1000的数字,产生对应的学号
    例如: 输入'23',输出'py1902023'
    输入'9', 输出'py1902009'
    输入'123',输出'py1902123'
num = 2
n = 3    # 学号的位数
z_n = n - len(str(num))    # '0'的个数
study_id = 'py1902' + '0' * z_n + str(num)
print(study_id)
  1. 输入字符串,将字符串的开头和结尾变成'+',产生一个新的字符串
    例如: 输入字符串'abc123', 输出'+bc12+'
str5 = 'abc123'
new_str = '+' + str5[1:-1]+'+'
print(new_str)
  1. 输入字符串,获取字符串的中间字符
    例如: 输入'abc1234' 输出:'1'
    输入'abc123' 输出'c1'
    """
    奇数个字符,中是: len//2
    偶数个字符,中是: len//2, len//2-1
    """
str6 = 'abc123'
length = len(str6)
if length % 2 == 0:
    print(str6[length//2-1], str6[length//2])
else:
    print(str6[length//2])


str1 = 'abcd1234'
# 方法一: 遍历
str2 = ''
for index in range(1, len(str1), 2):
    str2 += str1[index]
print(str2)

# 方法二: 切片
print(str1[1::2])

1.不断的从控制台输入年龄,根据年龄输出不同的提示(例如:老年人,青壮年,成年人,未成年,儿童)
输入'q',就退出

# while True:
#   value = input('请输入年龄,输入q结束:')

#   if value == 'q':
#       break

#   age = int(value)
#   if age <= 12:
#       print('儿童')
#   elif age < 18:
#       print('未成年')
#   elif age <= 50:
#       print('青壮年')
#   else:
#       print('老年')  

2.计算5的阶乘 5!的结果是

# 5! = 5*4*3*2*1
print('==============第二题============')
n = 5
sum1 = 1
for x in range(1, n+1):
    sum1 *= x

print(sum1)  

3.求1+2!+3!+...+20!的和
思路: 1. 先分别取出1~20 2.求每次取出的数的阶乘

n = 20
sum2 = 0  # 保存最后的和
for num in range(1, n+1):
    sum1 = 1   # 保存每个数的阶乘
    for x in range(1, num+1):
        sum1 *= x

    sum2 += sum1

print(sum2)

练习: 外面的for循环循环第5次的时候, 里面的循环第3次, sum1的值和sum2的值分别是多少。写出执行过程

# sum1 - 6, sum2 - 33

"""
num = 1,2,3,4,5...20
num = 1, 
    sum1 = 1
    x = 1
    x = 1: sum1 = 1
    sum2 += sum1 = 1
num = 2
    sum1 = 1
    x = 1, 2
    x = 1, sum1 = 1
    x = 2, sum1 = 1*2
    sum2 = 1 + 2 = 3
num = 3
    sum1 = 1
    x = 1,2,3
    x = 1, sum1 = 1
    x = 2, sum1 = 2
    x = 3, sum1 = 6
    sum2 = 3 + 6 = 9
num = 4
    sum1 = 1
    x = 1,2,3,4
    x = 1, sum1 = 1
    x = 2, sum1 = 2
    x = 3, sum1 = 6
    x = 4, sum1 = 24
    sum2 = 9 + 24 = 33
num = 5
    sum1 = 1
    x = 1,2,3,4,5
    x = 1, sum1 = 1
    x = 2, sum1 = 2
    x = 3, sum1 = 6

"""

5.循环输入大于0的数字进行累加,直到输入的数字为0,就结束循环,并最后输出累加的结果

print('==================第五题==================')
# sum1 = 0
# while True:
#   value = int(input('请输入一个数:'))
#   if value == 0:
#       break

#   sum1 += value
# print(sum1)

练习: 猜数字游戏
随机产生一个数,用户不断输入数字,直到输入的数字和产生的随机数一样,游戏就结果。
游戏过程中,根据输入的数字做相应的提示(大了,小了)

# random是python提供的和随机数相关的模块
import random  
"""
random.randint(M,N)  - 产生一个M~N的随机整数
"""
# print('===============欢迎来到猜数字游戏=================')
# num = random.randint(0, 100)
# count = 0
# while True:
#   value = int(input('请输入:'))
#   count += 1
#   if value == num:
#       print('恭喜你猜对了!!, 总共猜了', count, '次!')
#       break
#   elif value > num:
#       print('大了, 再小点儿')
#   else:
#       print('小了,再大点儿')

5.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

# 3, 33, 333
"""
3 = 0*10 + 3
33 = 30 + 3 = 3*10 + 3
333 = 330+3 = 33*10 + 3
3333 = 3330+3 = 333*10 + 3

规律: 当前项 = 前一项*10 + 3
"""
n = 5   # 决定总共有多少项
a = 2   # 每一项上的每一位是多少
sum1 = 0
num = 0    # 保存求和的每一项
for x in range(6):
    num = num * 10 + a
    print(num)
    sum1 += num
print(sum1)

补充: print的定制
可以在print括号的最后通过end来设置一个print结束后的效果;还可以通过sep来设置多个数据之间的间隔

6.根据n的值的不同,输出相应的形状

print('=========补充==========')
print('*', end=',')
print('*')
print(10, 20, sep='+++++', end=' ')
print(100)  

"""
n = 5
*****
****
***
**
*

n = 4
****     
***
**
*
"""
n = 7
for x in range(n, 0, -1):
    # print('*' * x)
    for _ in range(x):
        print('*', end='')
    print()

b.根据n的值的不同,输出相应的形状(n为奇数)
"""

n = 5
  *
 ***
*****

1:   1星  2空   1+2*2 = 5 
2:   3星  1空   3+1*2 = 5
3:   5星  0空   5+0*2 = 5


n = 7
   *       1   3s      1+3*2 = 7
  ***      3x  2s      3+2*2 = 7
 *****     5x  1s      5+1*2 = 7
*******    7x  0s      7+0*2 = 7

规律: 每一行星个数+空格数的2倍 == n
"""
n = 11
for star in range(1, n+1, 2):
    space = int((n - star) / 2)
    # 打印空格
    for _ in range(space):
        print(' ', end='')
    # 打印*
    for _ in range(star):
        print('*', end = '')
    print()


"""
n = 5
  *
 ***
*****
 ***
  *

 n = 7
   *
  ***
 *****
*******
 *****
  ***
   *
"""

10.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?

for small in range(2, 101, 2):
    for big in range(1, 34):
        for middle in range(1, 51):
            if (small + big + middle == 100) and (small/2 + big*3 + middle * 2 == 100):
                print('大:',big,'中:', middle, '小:', small)

你可能感兴趣的:(day6作业)